如何在Mongoose中查询不同的值?

时间:2011-05-18 11:20:38

标签: mongodb node.js 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返回的内容。

3 个答案:

答案 0 :(得分:101)

只是为Mongoose 3.x提供更新:

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

答案 1 :(得分:17)

在我的程序中,此代码有效。

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

通过 node.js v0.4.7, mongoose 1.3.3

答案 2 :(得分: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){

  });
}