2014-09-29 3 views
0

У меня есть таблица инвентаря в моей базе данных анализа с двумя соответствующими полями: productId и количеством. Когда получен груз, создается запись, содержащая productId и количество. Аналогичным образом, когда происходит продажа, инвентаризационная запись производится с указанием продукта и количества (что будет отрицательным, поскольку инвентарь будет уменьшаться после продажи).Группа по сумме агрегированного запроса с парсером Cloud Code

Я хотел бы запустить группу по совокупному запросу группы в таблице инвентаризации с помощью Парса облачных вычислений, который выводит словарь, содержащий уникальные productIds, в качестве ключей и сумму столбца количества для этих идентификаторов в качестве значений.

Я видел несколько старых сообщений о том, что Анализировать не делает этого, но более поздние сообщения относятся к Cloud Кодекса, такие как averageStart в руководстве Cloud Code: https://parse.com/docs/cloud_code_guide

Тем не менее, кажется, анализирующие. Запрос, используемый в AverageStars, имеет максимальный предел 1000 записей. Таким образом, когда я суммирую столбец количества, я делаю это только на 1000 записей, а не на всей таблице. Есть ли способ, которым я могу вычислить группу по/сумме по всем записям в таблице инвентаризации?


Например:

инвентаризации Таблица

количество PRODUCTID

Запись 1: ААААА 50

Запись 2: BBBBB 40

Запись 3: ААААА -5

Запись 4: BBBBB -2

Запись 5: ААААА 10

Запись 6: ААААА -7

Выходной словарь: {ААААА: 48 , BBBBB: 38}

+0

http://stackoverflow.com/questions/32840272/parse-query-aggregations – itzhar

ответ

3

Вы можете использовать Parse.Query.each(). Это не имеет предела. Если ваш класс имеет слишком много записей, он будет тайм-аут.

См docs

.: например

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.

+0

Спасибо !!! Он работает отлично. Я немного модифицировал код для вывода словаря. –

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); 
     } 
    }); 
});