2015-12-16 1 views
1

J'ai une collection appelée étudiants.
Les documents ont un champ house qui contient une valeur de chaîne, par exemple:
'Gryffindor', 'Hufflepuff', 'Ravenclaw', 'Slytherin'Comment obtenir le nombre de requêtes multiples sur une collection en une seule requête?

Je suis affichant le nombre des élèves dans chaque maison.

Pour que je fais quelque chose comme ceci:

G = Students.find({ house: 'Gryffindor' }).count(); 
H = Students.find({ house: 'Hufflepuff' }).count(); 
R = Students.find({ house: 'Ravenclaw' }).count(); 
S = Students.find({ house: 'Slytherin' }).count(); 

et l'affichage.

Existe-t-il un moyen de le faire dans une seule requête?

Répondre

3

Vous pouvez le faire en une seule requête en utilisant mongo aggregation.

Students.aggregate([ 
    { 
     $group : { 
      _id : "$house", 
      count: { $sum: 1 } 
     } 
    } 
]) 
+1

Et utilisez https://github.com/meteorhacks/meteor-agrgate – none

0

Si vous avez déjà toutes les données localement, vous pourriez le faire en utilisant une agrégation, soit en utilisant le mongo un (comme Volodymyr souligné) ou souligner la méthode countBy de/lodash. Dans le serveur, cela fonctionne toujours parce que toutes les données sont toujours présentes, mais pour que cela fonctionne sur le client (affichage du nombre réel), tous les utilisateurs devraient être publiés, ce qui pourrait ne pas être la meilleure pratique et même impossible pour les grandes applications . Dans ce cas, vous devriez probablement utiliser une méthode (qui retournera les comptes non réactifs), créer une collection de comptes séparée et la maintenir à jour ou même utiliser l'API de publication de météores de bas niveau pour publier une réaction réactive. compter.