/ / Comment interroger des valeurs distinctes dans Mongoose? - mongodb, node.js, mangouste

Comment interroger des valeurs distinctes dans Mongoose? - mongodb, node.js, mangouste

J'ai un problème où je veux pouvoir obtenir toutes les villes uniques d'une collection, et mon code ressemble à ceci:

var mongoose = require("mongoose"),
Schema = mongoose.Schema;

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

Dans MongoDb natif, je pouvais juste faire db.person.distinct("born_in_city"), mais il ne semble pas y avoir d’équivalent pour Mongoose. Est-ce la seule option pour parcourir moi-même tous les documents, ou existe-t-il une meilleure solution?

Pour tenter d'utiliser le sous-jacent node-mongodb-native comme suggéré par le répondeur j'ai essayé de faire ceci:

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

Cependant, le results est vide et il n’ya pas d’erreur. Je préférerais aussi pouvoir récupérer uniquement la collection nécessaire par nom plutôt que de filtrer collections retourner si possible.

Réponses:

90 pour la réponse № 1

Juste pour donner une mise à jour pour Mongoose 3.x:

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

14 pour la réponse № 2

Dans mon programme, ce code fonctionne.

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

par node.js v0.4.7, mangouste 1.3.3


2 pour la réponse № 3

J'ai lu le code source et le pilote node-mongodb-native est le moteur de la classe. Donc, sur l'objet de connexion. Ainsi, une fois que vous avez terminé mongoose.connect (mongodb: //), vous pouvez tenter le coup.

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

});
}