1

私のmongodbコレクションには、2つのレベルの埋め込みドキュメントを含むコレクションがあります。

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

特定の第2レベルのドキュメントを見つけるためにクエリを実行すると、長い時間がかかります。〜= 500ms

私が試したクエリは、次の行に似ています。これは、第2レベルのドキュメントからのみデータを取得したいものです。

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

ただし、これにより、field1、field2、すべてのEmbeddedDocumentsを含む1つのコレクション全体が返されます。

私はここで何か間違ったことをしていますか?

4

1 に答える 1

0

クエリは、"embedded_documents_1.embedded_documents_2._id":ObjectId("502e8f5565ce10780f00000c") に一致するドキュメントを検索しています

したがって、これに一致する各ドキュメントを完全に返しました。埋め込みドキュメントは本来、別のドキュメント内のドキュメントです。したがって、mongodb は完全なドキュメントを返しました。

返される値を第 2 レベルのドキュメントのみに制限する必要があります。クエリを制限する方法については、http://www.mongodb.org/display/DOCS/Querying#Querying-FieldSelectionを参照してください。

于 2012-09-11T01:46:55.220 に答える