78

コレクションのすべての一意の都市を取得できるようにしたいという問題があり、私のコードは次のようになります。

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

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

ネイティブの MongoDb では を実行できましたがdb.person.distinct("born_in_city")、Mongoose に相当するものはないようです。これを行うために自分ですべてのドキュメントを反復処理する唯一のオプションですか、それともより良い解決策がありますか?

node-mongodb-native回答者が示唆するように基礎を使用しようとして、私はこれを試みました:

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

ただし、results空であり、エラーはありません。collectionsまた、可能であれば、返されるものをフィルタリングするよりも、必要なコレクションのみを名前で取得できるようにしたいと考えています。

4

4 に答える 4

145

Just to give an update for Mongoose 3.x:

MyModel.find().distinct('_id', function(error, ids) {
    // ids is an array of all ObjectIds
});
于 2012-09-13T16:29:16.303 に答える
21

私のプログラムでは、このコードは機能します。

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

node.js v0.4.7、mongoose 1.3.3による

于 2011-05-20T02:55:10.627 に答える
2

ソースコードを読んだところ、node-mongodb-native ドライバーがクラスを動かしていました。接続オブジェクトについても同様です。したがって、mongoose.connect(mongodb://) を実行したら、これを試してみることができます。

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

  });
}
于 2011-05-18T17:58:46.900 に答える