unwind tutorial metodo funcion framework ejemplo datos como agrupar agregados agregacion mongodb meteor mongodb-query aggregation-framework

tutorial - Problema de agregación y agrupamiento de MongoDB en MeteorJS



metodo aggregate mongodb (1)

Si está utilizando el paquete agregado de meteoritos .aggregate() para implementar un .aggregate() en su colección, entonces solo devolverá una matriz en respuesta. Entonces, debes trabajar en una forma de colección publicada:

Meteor.publish("completedLB,function() { var self = this; var results = userCompleted.aggregate([ { "$match": { "progressState": true } }, { "$group": { "_id": "$userId", "progressState": { "$first": "$progressState" }, "count": { "$sum": 1 } }}, { "$sort": { "_id": 1 } } ]); _.each(results,function(result) { self.added("client_collection_name",Random.id(), { userId: result._id, progressState: result.progressState, count: result.count }); }); self.ready(); });

O para incluir los recuentos false ya que su resultado sugerido se sugiere a sí mismo:

{ "$group": { "_id": "$userId", "progressState": { "$first": true }, "count": { "$sum": { "$cond": ["$progressState", 1,0] } }}, { "$sort": { "_id": 1 } }

Como la tubería con una evaluación $cond para convertir a numérico.

Donde en la agregación básica solo está "totalizando" los resultados coincidentes y, por supuesto, $sort refiere a un campo presente en el resultado, que con su ejemplo sería el valor "userId" ahora en la clave _id de aggregation, pero podría también se debe "contar" para ordenar por el recuento total si así lo desea.

Esa parte estaba produciendo el error, ya que $sort es un campo presente y no un valor de campo con $ notation.

Pero, por supuesto, para publicar como una colección accesible para el cliente, debe reemplazar el _id real con algo esperado. Así que la generación aleatoria de identificadores funciona aquí, al igual que la inclusión de los otros campos.

Para obtener un poco más de detalle, y también una alternativa al paquete "hacks" que simplemente funciona con una instalación de vanilla, también hay esta respuesta por mí que tiene una lista completa como ejemplo.

Usando MongoDB en Meteor JS, ¿cómo utilizas Meteor Aggregate correctamente?

El resultado previsto es devolver usuarios agrupados por su userId y resumir un campo booleano llamado "progressState" (verdadero / falso).

Por ejemplo, el documento puede tener:

user 001 - true user 001 - false user 001 - true user 003 - false user 005 - true

pero el resultado previsto sería:

user 001: 2 true user 003: 0 true user 005: 1 true etc..

Mi intento da el siguiente error:

"exception: FieldPath field names may not start with ''$''."

Aquí está mi Código Meteoro:

Meteor.publishComposite(''completedLB'', { find: function() { return userCompleted.aggregate([ { $match: { "progressState": "true" } }, { $group: { "_id": "$userId", "count": { "$sum": "$progressState" } } }, { $sort : { "$progressState": -1 } } ]); } });