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

Kit*_*nde 64 mongoose mongodb node.js

我有一个问题,我希望能够获得集合的所有独特城市,我的代码看起来像这样:

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

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

在原生的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 );
  });
});
Run Code Online (Sandbox Code Playgroud)

然而,它results是空的,没有错误.我也希望能够只按名称获取所需的集合,而不是必须过滤collections返回的内容.

Ris*_*nha 111

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

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

  • 您也可以直接在[Model](http://mongoosejs.com/docs/api.html#model_Model-distinct)上调用它.`MyModel.distinct('_ id',{foo:'bar'},函数(错误,ids)...... (33认同)
  • 从Mongoose Docs中的示例(http://mongoosejs.com/docs/api.html#query_Query-sort),我认为你可以写:`MyModel.find({sort:{'_ id': - 1 distinct('_ id',function(error,ids){/*handle result*/});` (4认同)
  • 我怎样才能通过 ids 对结果进行排序? (2认同)

小智 18

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

Person.collection.distinct("born_in_city", function(error, results){
  console.log(results);
});
Run Code Online (Sandbox Code Playgroud)

by node.js v0.4.7,mongoose 1.3.3