Как запросить различные значения в Mongoose? - PullRequest
58 голосов
/ 18 мая 2011

У меня проблема с тем, что я хочу получить все уникальные города для коллекции, и мой код выглядит примерно так:

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 ]

104 голосов
/ 13 сентября 2012

Просто чтобы дать обновление для Mongoose 3.x:

MyModel.find().distinct('_id', function(error, ids) {
    // ids is an array of all ObjectIds
});
18 голосов
/ 20 мая 2011

В моей программе этот код работает.

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

от node.js v0.4.7, mongoose 1.3.3

2 голосов
/ 18 мая 2011

Я прочитал исходный код, а драйвер 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){

  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...