Model.findOne()&的区别是什么? Mongoose中的Model.findById()?

时间:2013-01-10 10:22:02

标签: node.js mongodb mongoose objectid

考虑我们正在根据_id值从MongoDB中搜索文档。以下哪个代码有效?

  1. ModelObj.findById(IdValue).exec(callback);

  2. ModelObj.findOne({ '_id': IdValue}).exec(callback);

  3. 我觉得ModelObj.findById()是有效的,但是有什么支持的原因或它是如何有效的?

4 个答案:

答案 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>