MongoDB的预测效率如何?

时间:2012-12-15 23:20:32

标签: mongodb projection

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

例如,在我只想要 field1 field2 的情况下,对于文档结构为的集合:

{
    "field1" : 1
    "field2" : true
    "field3" : ["big","array",...]
    "field4" : ["another","big","array",...]
}

我会从中受益更多:

  1. 在此集合旁边创建一个单独的集合 只有field1和field2,或
  2. 在包含/排除参数的原始文档上使用.find()
  3. 注意:保存相同数据两次的效率低下并不像我查询数据的效率那样值得关注

    非常感谢!

1 个答案:

答案 0 :(得分:8)

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

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

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

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