使用解析云代码分组By / Sum聚合查询

时间:2014-09-29 08:05:22

标签: group-by parse-platform sum cloud aggregate

我的Parse数据库中有Inventory表,有两个相关字段:productId和quantity。收到货件时,会创建一个包含productId和quantity的记录。类似地,当发生销售时,使用productId和数量进行库存记录(这将是负数,因为库存将在销售后减少)。

我想在Inventory表上使用/ sum聚合查询运行一个分组,其中Parse Cloud Code输出一个包含唯一productIds作为键的字典,以及那些ID作为值的数量列的总和。

我看过一些旧帖子说Parse没有这样做,但是最近的帖子引用了Cloud Code,例如Cloud Code Guide中的averageStart:https://parse.com/docs/cloud_code_guide

但是,似乎averageStars中使用的Parse.Query最多限制为1000条记录。因此,当我对数量列求和时,我只在1000条记录而不是整个表格上这样做。有没有办法可以在库存表中的所有记录中按/计算组?


例如:

广告资源表

productId数量

记录1:AAAAA 50

记录2:BBBBB 40

记录3:AAAAA -5

记录4:BBBBB -2

记录5:AAAAA 10

记录6:AAAAA-7

输出字典: {AAAAA:48,BBBBB:38}

2 个答案:

答案 0 :(得分:4)

您可以使用Parse.Query.each()。它没有限制。如果你的班级有太多的条目,它会超时。

请参阅docs

e.g:

var totalQuantity = 0;
var inventoryQuery = new Parse.Query("Inventory");
inventoryQuery.each(
    function(result){
        totalQuantity += result.get("quantity");
    }, {
        success: function() {
            // looped through everything
        },
        error: function(error) {
            // error is an instance of Parse.Error.
        }
    });
});

如果超时,则必须构建类似this的内容。

答案 1 :(得分:3)

如果您想查看带有字典的代码:

Parse.Cloud.define("retrieveInventory", function(request, response) {
  var productDictionary ={};
  var query = new Parse.Query("Inventory");
  query.equalTo("personId", request.params.personId);
  query.each(
     function(result){
        var num = result.get("quantity");
        if(result.get("productId") in productDictionary){
             productDictionary[result.get("productId")] += num;
        }
        else{
             productDictionary[result.get("productId")] = num;
        }
    }, {
        success: function() {
            response.success(productDictionary);
        },
        error: function(error) {
            response.error("Query failed. Error = " + error.message);
        }
    });
});