J'ai un problème où je veux pouvoir obtenir toutes les villes uniques pour 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 simplement faire db.person.distinct("born_in_city")
, mais il ne semble pas y avoir d'équivalent pour Mongoose. La seule option est-elle de répéter tous les documents moi-même pour ce faire, ou existe-t-il une meilleure solution?
Dans une tentative d'utiliser le node-mongodb-native
Sous-jacent comme suggéré par le répondeur, j'ai tenté de le faire:
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'y a pas d'erreur. Je préférerais également pouvoir récupérer uniquement la collection nécessaire par nom plutôt que de filtrer ce que collections
renvoie si possible.
Juste pour donner une mise à jour pour Mongoose 3.x:
MyModel.find().distinct('_id', function(error, ids) {
// ids is an array of all ObjectIds
});
Dans mon programme, ce code fonctionne.
Person.collection.distinct("born_in_city", function(error, results){
console.log(results);
});
par node.js v0.4.7, mongoose 1.3.3
J'ai lu le code source et le pilote natif de node-mongodb est ce qui alimente la classe. Donc sur l'objet de connexion. Donc, après avoir fait mongoose.connect (mongodb: //), vous pouvez essayer ceci.
if(mongoose.connections.length > 0) {
var nativeconn = mongoose.connections[0].conn;
nativeconn.person.distinct('born_in_city', function(error, results){
});
}