【问题标题】:Mongo: is it the same to use .find({_id: id}) vs .findOne({_id: id})?Mongo:使用 .find({_id: id}) 与 .findOne({_id: id}) 是否相同?
【发布时间】:2019-02-22 17:48:33
【问题描述】:

我问这个问题是出于性能方面的考虑 - 知道有一个带有 id 的唯一文档。

MyCollection.find({_id: id}) //this should return only one document - id is unique

MyCollection.findOne({_id: id}) //this is equivalent to .find({_id: id}).limit(1) from what I've read

我的第一个想法是,无论过滤器如何,.find 都必须通过集合,因此在我只想检索一个文档的情况下,.findOne 更快,对吗?或者也许因为_id总是被索引,也许没有区别?

我不是在问函数的输出,这是一个优化/性能问题。

【问题讨论】:

标签: mongodb optimization mongoose


【解决方案1】:

在这种特殊情况下,没有性能差异(因为唯一索引,是的)。

可能存在响应形状差异。我对mongoose不熟悉,但是在mongodb shell中,find()返回一个游标(马上枚举出来),findOne()直接返回文档。

【讨论】:

  • 所以只要过滤器只包含会返回 1 个结果的索引字段就没有区别?
  • 它是 Mongo shell,findOne 也可以漂亮地打印结果。
  • 唯一真正的区别是findOne 还指定了limit(1)。但是,如果您只有一个文档,无论如何您都可以点击,我无法想象这很重要。 (如果你有很多潜在的点击,那就很重要了)。
猜你喜欢
  • 2015-04-16
  • 1970-01-01
  • 2016-09-13
  • 2023-03-20
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
相关资源
最近更新 更多