通过 _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.js 除了 _id & __v 默认来自查询结果
Mongoose.js 除了 _id & __v 默认来自查询结果