web-dev-qa-db-fra.com

Comment rechercher des valeurs distinctes dans Mongoose?

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.

59
Kit Sunde

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

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

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

18
yshgt

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){

  });
}
2
Bryan