Cloud Code on Parse 计算票数的函数
Function for calculating number of votes in Cloude Code on Parse
我刚开始解析 Cloude 代码,所以不太擅长。
我有带有以下字段的自定义 VoteObject:
- 作为字符串投票
投票是从1到N的字符串。
我有 iOS 应用程序,每次我在其中投票时,我都会发送投票编号进行解析。
就像第一票是1号,第二票是2号,依此类推。
现在我不会制作自定义 Cloude 代码,每次投票都会 return 票数。
我来到 https://www.parse.com/docs/cloud_code_guide#functions,这是我目前所拥有的:
Parse.Cloud.define("stat", function(request, response) {
var query = new Parse.Query("VoteObject");
query.find({
success: function(results) {
var sum = 0;
// make dictionary in JavaScript
for (var i = 0; i < results.length; ++i) {
sum += results[i].get("vote");
// if vote key does not exist in dictionary, put it to 1
// if exist, +1
}
// return dictionary
response.success(sum / results.length);
},
error: function() {
response.error("NO STAT");
}
});
});
我知道要实现什么算法(我把它写成评论),但不知道如何在 Parse 上实现。
任何帮助表示赞赏。
您可以通过两种方式解决此问题:
- 遍历每条增加计数器的记录
- 将一些
count()
查询链接在一起
选项 1 在缩放方面存在一些问题(尤其是在 1,000 条记录标记处,在 10,000 条记录标记处更严重)。
选项 2 要求您知道最大投票数是多少,但我希望这不是问题。
这是 #2 的示例:
var queries = [];
var totals = {};
// change this as needed
var maxVote = 3;
for (var vote = 1; vote <= maxVote; vote++) {
totals[vote.toString()] = 0;
var query = new Parse.Query("VoteObject");
var query.equalTo('vote', vote.toString());
// push into parallel promises array
queries.push(query.count().then(function(count) {
var localVote = vote.toString();
totals[localVote] = count;
});
}
// wait for them all to finish, order isn't important
Parse.Promise.when(queries).then(function() {
// all totals calculated, do something with totals object
});
如果我没有犯任何错误,那应该可行。
我刚开始解析 Cloude 代码,所以不太擅长。
我有带有以下字段的自定义 VoteObject:
- 作为字符串投票
投票是从1到N的字符串。
我有 iOS 应用程序,每次我在其中投票时,我都会发送投票编号进行解析。
就像第一票是1号,第二票是2号,依此类推。
现在我不会制作自定义 Cloude 代码,每次投票都会 return 票数。
我来到 https://www.parse.com/docs/cloud_code_guide#functions,这是我目前所拥有的:
Parse.Cloud.define("stat", function(request, response) {
var query = new Parse.Query("VoteObject");
query.find({
success: function(results) {
var sum = 0;
// make dictionary in JavaScript
for (var i = 0; i < results.length; ++i) {
sum += results[i].get("vote");
// if vote key does not exist in dictionary, put it to 1
// if exist, +1
}
// return dictionary
response.success(sum / results.length);
},
error: function() {
response.error("NO STAT");
}
});
});
我知道要实现什么算法(我把它写成评论),但不知道如何在 Parse 上实现。
任何帮助表示赞赏。
您可以通过两种方式解决此问题:
- 遍历每条增加计数器的记录
- 将一些
count()
查询链接在一起
选项 1 在缩放方面存在一些问题(尤其是在 1,000 条记录标记处,在 10,000 条记录标记处更严重)。
选项 2 要求您知道最大投票数是多少,但我希望这不是问题。
这是 #2 的示例:
var queries = [];
var totals = {};
// change this as needed
var maxVote = 3;
for (var vote = 1; vote <= maxVote; vote++) {
totals[vote.toString()] = 0;
var query = new Parse.Query("VoteObject");
var query.equalTo('vote', vote.toString());
// push into parallel promises array
queries.push(query.count().then(function(count) {
var localVote = vote.toString();
totals[localVote] = count;
});
}
// wait for them all to finish, order isn't important
Parse.Promise.when(queries).then(function() {
// all totals calculated, do something with totals object
});
如果我没有犯任何错误,那应该可行。