MongoDB:findOne是否将整个集合从数据库检索到服务器

问题描述 投票:0回答:2

我正在尝试创建一个网站,我正在使用mongoDB来存储我的数据库。我对我广泛使用的查询findOne的性能有疑问。此查询是否将整个集合从数据库带到服务器,然后对其执行迭代,还是在数据库上执行迭代并将文档返回到服务器?从服务器中提取整个集合将是一个问题,因为传输如此庞大的数据块需要时间。

database mongodb mongodb-query database-performance query-performance
2个回答
0
投票

了解mongodb如何使用索引可以帮助您回答这个问题。如果将参数传递给findOne查询,并且这些参数与集合上的索引匹配,那么mongodb将使用索引来查找结果。如果没有索引,mongodb将需要扫描集合,直到找到匹配项。

例如,如果您运行如下查询:

db.coll.findOne({"_id": ObjectId("5a0a0e6f29642fd7a970420c")})

然后mongodb将确切地知道您想要哪个文档,因为_id字段是唯一的并且包含索引。如果您查询另一个未编制索引的字段,那么mongodb将需要执行COLLSCAN来查找要返回的文档。


-1
投票

引用MongoDB官方文档:

findOne - 返回满足集合或视图上指定查询条件的一个文档。如果多个文档满足查询,则此方法根据反映磁盘上文档顺序的自然顺序返回第一个文档。

显然隐含的是数据库本身只返回一个集合,此外,你总是可以使用postman或console.log来检查服务器返回的内容(如果你不确定)。

© www.soinside.com 2019 - 2024. All rights reserved.