Météore: comment rechercher seulement les valeurs de champ distinct aka une collection.distinctes(“fieldname”) similaire à Mongo de l'
Je suis en utilisant le Météore, et j'essaie de trouver seulement distinctes (unique) des valeurs d'un champ.
Mongodb a la commande
Collection.distinct("fieldname");
mais il n'est pas mis en œuvre dans le Météore de pilote pour Mongo.
J'ai essayé d'utiliser le meteor-mongo-extensions paquet, mais quand même eu un "undefined" sur la console du client pour un client-côté Collection.distinct("fieldname");
ce qui, essentiellement, d'une recherche?
Je me sens comme quelqu'un c'est une requête de base - comme par exemple une liste d'élèves avec leur enseignant comme un champ, et ensuite faire une liste des élèves par les enseignants en dehors de cela, par exemple...
si je peux juste envelopper mon paresseux errant cerveau autour de la notion générale, je peux sans doute bash quelque chose de réalisable sur.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement utiliser underscore.js qui vient avec Meteor - devrait être bon pour la suggestion de cas d'utilisation. Vous pourriez rencontrer des problèmes de performances si vous l'essayez sur un vaste ensemble de données ou d'exécuter à plusieurs reprises, mais il devrait être suffisant pour la commune de la-ou-l'utilisation du jardin:
Qui sera de retour les différentes entrées dans
myField
pour tous les documentsCollection
. Toutes mes excuses si le one-liner est un peu lourd; lasort
etfields
options et lestrue
drapeau sont juste pour le rendre plus efficace._.uniq
plus je l'aime d'habillage de trouver un comme ça. quel est le problème de performance mentionnées due?uniqueTeachers: function() { var everything = myCollection.find().fetch(); var justTeacherNames = _.pluck(everything,"teacherName"); return _.uniq(justTeacherNames);
aucune idée pourquoi le standard meteor façon demyCollection.find({}, {fields:{teacherName:1}}).fetch();
était borking mais l' _.arracher travaillé?fetch()
justeCollection.find({}).map( function(x) {return x.myField;})
._.uniq(Courses.find({}).map( function(x) {return x.fullName;}));
publish-composite
.Si vous préférez le faire sur le serveur et ainsi économiser du client de mémoire et de bande passante, essayez de cet agrégateur de package. Il s'enroule de mongodb "distincte" de la fonction. https://github.com/zvictor/meteor-mongo-server/
meteor add monbro:mongodb-mapreduce-aggregation
L'amélioration de richsilv réponse:
Comment utiliser:
dinstinct(..,.., condition){ if (!condition) condition = {}
à être utilisé danscollection.find(condition) ...}
Un non-trait de Soulignement, pur mongo solution serait d'accéder à la collection raw directement. Cela implique une Promesse (bien que vous pouvez utiliser
await
attendre la valeur résolue).Collection._collection.rawCollection().distinct('fieldname').then(distinctValues => console.log(distinctValues))