慢Mongodb嵌入式文档查询

时间:2012-09-11 01:23:30

标签: ruby-on-rails mongodb mongoid

在我的mongodb集合中,我有一个包含两级嵌入文档的集合。

Collection
 - field1
 - field2
 - EmbeddedDocuments1
    - field_a
    - field_b
    - EmbeddedDocument_a
       - field_A
       - field_B
       - field_C
  - EmbeddedDocuments2
    - field_c
    - field_d
    - EmbeddedDocument_a
       - field_D
       - field_E
       - field_F
 - EmbeddedDocuments3
    - field_e
    - field_f
    - EmbeddedDocument_a
       - field_G
       - field_H
       - field_I

当我查询查找特定的二级文档时,需要很长时间,〜= 500ms

我尝试的查询类似于下面的行,我只想从二级文档中获取数据。

db.collections.find({ "embedded_documents_1.embedded_documents_2._id":ObjectId("502e8f5565ce10780f00000c")  })

但是,这会返回整个集合,其中包含field1,field2,所有EmbeddedDocuments

我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

您的查询正在搜索与“embedded_documents_1.embedded_documents_2._id”匹配的任何文档:ObjectId(“502e8f5565ce10780f00000c”)

所以它已经完整地返回了与之匹配的每个文档。嵌入式文档本质上是其他文档中的文档。所以mongodb已经返回了完整的文件。

您需要将返回的值限制为仅限二级文档。有关如何限制查询的信息,请查看http://www.mongodb.org/display/DOCS/Querying#Querying-FieldSelection