35

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

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

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

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

4

4 回答 4

54

findByIdfindOne只是一个便利功能,与您显示的调用完全相同。

这是来源

Model.findById = function findById (id, fields, options, callback) {
  return this.findOne({ _id: id }, fields, options, callback);
};
于 2013-01-10T14:21:41.250 回答
18

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

这是来源

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);
};
于 2018-09-29T00:51:41.450 回答
1

findById(id) 只是 find({_id : id}) 或 findOne({_id: id}) 的语法糖

于 2018-05-26T19:29:25.543 回答
-3

使用 .findOne 使数据库查看其记录,检查每个 bson 文档以查找相关变量,然后检查值,如果 mongo 知道它正在查找内部索引的 _id 字段,则不必查看每个文档

于 2013-01-10T10:30:30.547 回答