group-by - para - tagxedo programa
Agrupamiento agrupado/suma de consulta con código de nube Parse (2)
Tengo una tabla de inventario en mi base de datos de Parse con dos campos relevantes: idProducto y cantidad. Cuando se recibe un envío, se crea un registro que contiene el IdProducto y la cantidad. De manera similar, cuando se produce una venta, se realiza un registro de inventario con la Id del producto y la cantidad (que será negativa, ya que el inventario disminuirá después de la venta).
Me gustaría ejecutar una consulta agregada de grupo / suma en la tabla Inventario con código de nube Parse que genera un diccionario que contiene ID de producto únicos como las claves y la suma de la columna de cantidad para esos ID como los valores.
He visto una serie de publicaciones antiguas que dicen que Parse no hace esto, pero luego las publicaciones más recientes hacen referencia al Código de la nube, como averageStart en la Guía del código en la nube: https://parse.com/docs/cloud_code_guide
Sin embargo, parece que Parse.Query utilizado en averageStars tiene un límite máximo de 1000 registros. Por lo tanto, cuando sumo la columna de cantidad, solo lo hago en 1000 registros en lugar de toda la tabla. ¿Hay alguna manera de que pueda calcular el grupo por / suma en todos los registros en la tabla de inventario?
Por ejemplo:
Tabla de inventario
cantidad de productId
Registro 1: AAAAA 50
Registro 2: BBBBB 40
Registro 3: AAAAA -5
Registro 4: BBBBB -2
Registro 5: AAAAA 10
Registro 6: AAAAA -7
Diccionario de salida: {AAAAA: 48, BBBBB: 38}
Puede usar Parse.Query.each()
. No tiene limite Si tu clase tiene demasiadas entradas, sin embargo, se agota el tiempo de espera.
Ver documentos
p.ej:
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.
}
});
});
Si se agota el tiempo, tienes que construir algo como esto .
En caso de que quiera ver el código con el diccionario:
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);
}
});
});