web-dev-qa-db-ja.com

Mongooseで個別の値を照会するにはどうすればよいですか?

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

_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が返すものを可能な限りフィルター処理するのではなく、名前で必要なコレクションのみをフェッチできるようにしたいと思います。

59
Kit Sunde

Mongoose 3.xの更新を提供するだけです:

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

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

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

node.js v0.4.7、mongoose 1.3.3より

18
yshgt

ソースコードを読み、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){

  });
}
2
Bryan