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

只是为 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,猫鼬 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 回答
0
const findBornCity = async() => {
    const bornCity = await Person.find().distinct("born_in_city")
    return bornCity
}
于 2021-10-23T07:03:48.167 回答