13

查询 mongo 数据库时排除文档中几乎所有数据是否有很多开销?

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

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

我会从以下方面受益更多:

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

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

非常感谢!

4

1 回答 1

8

投影有点类似于在 SQL 中显式使用列名,因此询问返回少量数据是否会比返回大量数据(完整文档)产生开销似乎有点违反直觉。

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

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

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

于 2012-12-16T12:10:59.490 回答