通过 _id 进行简单查询,mongoose 和 node.js 不起作用

Posted

技术标签:

【中文标题】通过 _id 进行简单查询,mongoose 和 node.js 不起作用【英文标题】:Simple query by _id with mongoose and node.js not working 【发布时间】:2015-02-20 22:46:59 【问题描述】:

目标:

通过 _id 从 mongodb 中查找一个文档。

环境:

JavaScript、Node.js、Mongoose

所以我有这个代码...(这里是“发布”模式的一部分)

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 一起使用

我直接在 mongodb 引擎中尝试了查询 db.posts.find(_id: $eq: ObjectId('54986a8b43db661a0ec827e4')); 并且它有效,但在猫鼬中无效。 ..

所以我不知道如何仅通过 id 进行查询!

【问题讨论】:

【参考方案1】:

它不起作用,因为$eq 是一个聚合运算符。只需使用直接比较即可:

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

您不需要从 id 中创建 ObjectId,因为 Mongoose 会为您进行转换。

但是你甚至不需要自己创建这个方法,因为内置的findById 方法可以做同样的事情。

【讨论】:

返回 null ... :( @Rimbuaj 回调的第一个参数是错误参数,第二个参数是找到的文档。所以null只是表示没有错误。

以上是关于通过 _id 进行简单查询,mongoose 和 node.js 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose中关联查询populate的使用

使用 Mongoose 通过 _id 查找

Mongoose.js 除了 _id & __v 默认来自查询结果

Mongoose.js 除了 _id & __v 默认来自查询结果

有没有办法通过在 Mongoose 中查询来更新文档数组中的对象?

无法使用函数(req,res,next,id)mongoose(mongodb)中的动态id字段进行查询