query objects fields elemmatch consultas avanzadas array mongodb node.js mongoose

mongodb - objects - ¿Cómo consulto distintos valores en Mongoose?



mongodb select fields (3)

Tengo un problema en el que deseo poder obtener todas las ciudades únicas para una colección, y mi código se ve así:

var mongoose = require("mongoose"), Schema = mongoose.Schema; var PersonSchema = new Schema({ name: String, born_in_city: String }); var Person = mongoose.model(''Person'', PersonSchema);

En MongoDb nativo podría hacer db.person.distinct("born_in_city") , pero no parece haber nada equivalente para Mongoose. ¿Es la única opción para iterar sobre todos los documentos para hacer esto, o hay una mejor solución?

En un intento de utilizar el node-mongodb-native subyacente node-mongodb-native como lo sugirió el respondedor, intenté hacer esto:

mongoose.connection.db.collections(function(err, collections){ collections[0].distinct(''born_in_city'', function( err, results ){ console.log( err, results ); }); });

Sin embargo, los results están vacíos y no hay ningún error. También preferiría poder buscar solo la colección necesaria por nombre en lugar de tener que filtrar las collections devuelven, si es posible.


En mi programa, este código funciona.

Person.collection.distinct("born_in_city", function(error, results){ console.log(results); });

por node.js v0.4.7, mangosta 1.3.3


Leo el código fuente y el controlador node-mongodb-native es lo que impulsa la clase. Entonces en el objeto de conexión. Entonces, después de haber hecho mongoose.connect (mongodb: //), puede darle una oportunidad.

if(mongoose.connections.length > 0) { var nativeconn = mongoose.connections[0].conn; nativeconn.person.distinct(''born_in_city'', function(error, results){ }); }


Solo para dar una actualización de Mongoose 3.x:

MyModel.find().distinct(''_id'', function(error, ids) { // ids is an array of all ObjectIds });