meteor distinct

Meteor: cómo buscar solo valores de campo distintos, también conocidos como collection.distinct("nombre de campo") similar a Mongo''s



(4)

Mejorando la respuesta de richsilv:

function distinct(collection, field) { return _.uniq(collection.find({}, { sort: {[field]: 1}, fields: {[field]: 1} }).fetch().map(x => x[field]), true); }

Cómo utilizar:

var arrResults = distinct(MyCollection, ''myfield'');

Estoy usando Meteor, y estoy tratando de encontrar solo valores distintos (únicos) de un campo. Mongodb tiene el comando

Collection.distinct("fieldname");

pero no está implementado en el controlador Meteor para Mongo. Intenté usar el paquete meteor-mongo-extensions, pero obtuve un "indefinido" en la consola del cliente para un Collection.distinct("fieldname"); del lado del cliente Collection.distinct("fieldname");

¿Qué, esencialmente, es una búsqueda distinta?

Siento que alguien es una consulta tan básica, como por ejemplo una lista de estudiantes con su profesor como campo, y luego hacer una lista de estudiantes por profesores, por ejemplo ...

si puedo simplemente envolver mi cerebro perezoso errante en torno al concepto general, probablemente pueda bash algo viable.


Puedes usar underscore.js, que viene con Meteor, debería estar bien para el caso de uso sugerido. Es posible que tenga problemas de rendimiento si prueba esto en un gran conjunto de datos o lo ejecuta de forma repetida, pero debería ser adecuado para el uso común o en el jardín:

var distinctEntries = _.uniq(Collection.find({}, { sort: {myField: 1}, fields: {myField: true} }).fetch().map(function(x) { return x.myField; }), true);

Eso devolverá las distintas entradas en myField para todos los documentos en la Collection . Disculpas si el one-liner parece un poco difícil de manejar; las opciones de sort y fields y la bandera true son solo para hacerlo más eficiente.



Una solución de mongo pura sin subrayado sería acceder directamente a la colección sin formato. Esto implica una Promesa (aunque puede usar await para esperar el valor resuelto).

Collection._collection.rawCollection().distinct(''fieldname'').then(distinctValues => console.log(distinctValues))