计算Parse中Cloud Code的投票数的函数

时间:2015-01-13 17:37:42

标签: ios parse-platform

我刚开始使用解析Cloude Code,所以我对它并不擅长。

我有以下字段的自定义VoteObject:

  • 投票为字符串

投票是从1到N的字符串 我有iOS应用程序,每当我投票时,我发送投票号码进行解析 像第一次投​​票是1号,第2号投票,依此类推。

现在我不会制作定制的Cloude Code,它将返回每次投票的票数 我来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上执行它。
任何帮助赞赏。

1 个答案:

答案 0 :(得分:1)

有两种方法可以解决这个问题:

  1. 随着时间的推移迭代每个增加计数器的记录
  2. 将一些count()个查询链接在一起
  3. 选项1在缩放方面存在一些问题(特别是在1000记录标记处,甚至在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
    });
    

    如果我没有犯任何错误,这应该有用。