Si está utilizando el agregado de hacks de meteoritos
paquete para implementar un .aggregate()
comando en su colección, entonces solo devolverá una matriz en respuesta. Así que necesitas convertir eso 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 el false
cuenta como su salida sugerida se sugiere a sí misma:
{ "$group": {
"_id": "$userId",
"progressState": { "$first": true },
"count": { "$sum": { "$cond": ["$progressState", 1,0] }
}},
{ "$sort": { "_id": 1 } }
Como canalización con un $cond
evaluación para convertir a numérico.
Donde en la agregación básica simplemente está "totalizando" los resultados coincidentes y, por supuesto, el $sort
se refiere a un campo presente en la salida, que según su ejemplo sería el valor "userId" ahora en el _id
clave de agregación, pero también podría ser "contar" para ordenar por el conteo total si se desea.
Esa parte estaba produciendo el error, como $sort
es un campo presente y no un valor de campo con $
notación.
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 de id aleatorios funciona aquí, al igual que la inclusión de los otros campos.
Para obtener un poco más de detalles, y también una alternativa al paquete "hacks" que solo funciona con una instalación estándar, también hay esta respuesta por mí mismo que tiene un listado completo como ejemplo.