考虑我们正在根据_id值从MongoDB中搜索文档。以下哪个代码有效?
ModelObj.findById(IdValue).exec(callback);
ModelObj.findOne({ '_id': IdValue}).exec(callback);
我觉得ModelObj.findById()是有效的,但是有什么支持的原因或它是如何有效的?
答案 0 :(得分:41)
findById
只是一个便利函数,它与您显示的findOne
调用完全相同。
这是the source:
Model.findById = function findById (id, fields, options, callback) {
return this.findOne({ _id: id }, fields, options, callback);
};
答案 1 :(得分:1)
findById(id)
几乎等同于findOne({ _id: id })
。
如果要按文档的_id查询,请使用findById()
而不是findOne()
。
两个函数都触发findOne()
,唯一的区别在于它们如何处理undefined
。
如果使用findOne()
,则会看到findOne(undefined)
和findOne({ _id: undefined })
等同于findOne({})
并返回任意文档。
但是,猫鼬会将findById(undefined)
转换为findOne({ _id: null })
。
请参见https://mongoosejs.com/docs/api.html#model_Model.findById
这里是source:
Model.findById = function findById(id, projection, options, callback) {
if (typeof id === 'undefined') {
id = null;
}
if (callback) {
callback = this.$wrapCallback(callback);
}
return this.findOne({_id: id}, projection, options, callback);
};
答案 2 :(得分:0)
findById(id)只是find({_ id:id})或findOne({_ id:id})的语法糖
答案 3 :(得分:-2)
使用.findOne使数据库查看其记录,检查每个bson文档以查找相关变量,然后检查值,如果mongo知道它正在寻找内部索引的_id字段,则不必查看每个文档< / p>