MongoDB的预测效率如何?

Ash*_*Ash 13 projection mongodb

在查询mongo数据库时,排除文档中的几乎所有数据会有很多开销吗?

例如,在我只需要field1field2的情况下,对于具有以下文档结构的集合:

{
    "field1" : 1
    "field2" : true
    "field3" : ["big","array",...]
    "field4" : ["another","big","array",...]
}
Run Code Online (Sandbox Code Playgroud)

我会从中受益更多:

  1. 在此集合旁边创建一个单独的集合,其中仅包含field1和field2,或
  2. 使用包含/排除参数在原始文档上使用.find()

注意:保存相同数据两次的低效率对我来说并不像我查询数据的效率那么重要

非常感谢!

Asy*_*sky 8

投影有点类似于在SQL中显式使用列名,因此,如果返回较少量的数据会导致返回大量数据(完整文档)的开销,这似乎有点违反直觉.

所以你必须找到文档(取决于你如何.find()它可能快或慢)但只返回文档的前两个字段而不是所有字段(完整文档)会使它更快而不慢.

只有当您担心自己的收藏适合RAM时,才能获得第二个收藏.如果重复集合中的文档要小得多,那么它们可能适合较小的总RAM,从而减少了需要从磁盘交换页面的机会.但是,如果您要写入此集合以及原始集合,那么您必须在RAM中拥有比仅拥有原始集合更多的数据.

因此,虽然错综复杂的细节可能取决于您的个人设置,但一般答案可能是2.您将从使用投影中获益更多,并且只返回您需要的两个字段.