コレクションの一意の都市をすべて取得できるようにしたいという問題があり、私のコードは次のようになります。
_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
が返すものを可能な限りフィルター処理するのではなく、名前で必要なコレクションのみをフェッチできるようにしたいと思います。
Mongoose 3.xの更新を提供するだけです:
MyModel.find().distinct('_id', function(error, ids) {
// ids is an array of all ObjectIds
});
私のプログラムでは、このコードは機能します。
Person.collection.distinct("born_in_city", function(error, results){
console.log(results);
});
node.js v0.4.7、mongoose 1.3.3より
ソースコードを読み、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){
});
}