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

时间:2017-11-14 08:31:38

标签: database mongodb mongodb-query database-performance query-performance

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:-1)

引用官方MongoDB文档:

  

findOne - 返回一个满足指定查询条件的文档   集合或视图。如果多个文档满足查询,这个   method按照自然顺序返回第一个文档   反映了磁盘上文档的顺序。

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