Mongodb Mongo:使用.find({u id:id})和.findOne({{u id:id})是一样的吗?

Mongodb Mongo:使用.find({u id:id})和.findOne({{u id:id})是一样的吗?,mongodb,optimization,mongoose,Mongodb,Optimization,Mongoose,我问的是性能方面的问题-知道有一个id为id的唯一文档 MyCollection.find({_id: id}) //this should return only one document - id is unique vs 我的第一个想法是,无论过滤器是什么,.find都必须通过集合,因此如果我只想检索一个文档,.findOne会更快,对吗?或者因为\u id总是被索引,所以可能没有区别 我不是问函数的输出,这是一个优化/perf问题。在这种特殊情况下,没有性能差异(因为唯一索引,是的)

我问的是性能方面的问题-知道有一个id为
id
的唯一文档

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

我的第一个想法是,无论过滤器是什么,
.find
都必须通过集合,因此如果我只想检索一个文档,
.findOne
会更快,对吗?或者因为
\u id
总是被索引,所以可能没有区别


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

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


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

因此,只要过滤器只包含将返回1个结果的索引字段,就没有什么区别了?它是Mongo shell,
findOne
也可以漂亮地打印结果。唯一真正的区别是
findOne
还指定了
限制(1)
。但是,如果您只有一个文档,那么无论如何您都可能找到它,我无法想象这有什么关系。(如果你有很多潜在的点击率,这将很重要。)@kRiZ的可能重复我的问题是关于性能,而不是函数的输出。这可能是关于性能的非常清楚的问题。你的问题已经在网站上尝试了很长时间。这也是一个不同的问题,我想知道调用
.find
(没有
.limit(1)
,但知道它应该返回一个元素)是否比调用
.findOne()快/慢/相同
MyCollection.findOne({_id: id}) //this is equivalent to .find({_id: id}).limit(1) from what I've read