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 № 1Juste 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){
});
}