Простой запрос по _id с мангустом и node.js не работает

цель:

Найти один документ из mongodb по его _id.

Окружающая обстановка:

JavaScript, Node.js, Mongoose

Итак, у меня есть этот код... (здесь часть схемы "Post")

PostSchema.statics = {
   findById: function (id, cb) {
       this.findOne({ _id : { $eq: mongoose.Types.ObjectId(id) } }).exec(cb);
   }
}

А затем этот другой код, вызывающий этот метод:

var Post = mongoose.model('Post');
Post.findById('54986a8b43db661a0ec827e4', function(result){
     console.log(result);
});

Я получаю сообщение об ошибке: невозможно использовать $eq с ObjectId

Я попробовал запрос db.posts.find({_id: {$eq: ObjectId('54986a8b43db661a0ec827e4')}}); непосредственно в движке mongodb, и он работает, но не в мангусте...

Поэтому я не знаю, что делать для запроса только по идентификатору!


person R01010010    schedule 22.12.2014    source источник


Ответы (1)


Это не работает, потому что $eq — это оператор агрегации. Вместо этого используйте прямое сравнение:

PostSchema.statics = {
   findById: function (id, cb) {
       this.findOne({ _id : id }).exec(cb);
   }
}

Вам не нужно создавать ObjectId из id, так как Mongoose сделает это за вас.

Но вам даже не нужно создавать этот метод самостоятельно, поскольку встроенный findById метод делает то же самое.

person JohnnyHK    schedule 22.12.2014
comment
который возвращает ноль... :( - person R01010010; 22.12.2014
comment
@Rimbuaj Первый параметр обратного вызова — это параметр ошибки, второй параметр — найденный документ. Таким образом, null просто указывает на то, что ошибки не было. - person JohnnyHK; 22.12.2014