web-dev-qa-db-ja.com

MongoDBでの埋め込みドキュメントのフィルタリング

MongoDBで埋め込まれたドキュメントをフィルタリングする方法を理解するのに苦労しており、リレーショナルアソシエーションを使用する必要があると考え始めていますが、ドキュメントストアのコンテキストではそれが間違っていると感じています。

典型的なブログ/コメントシステムに固執して、私はblogsのコレクションを持っており、各blogには多くのcommentsがあります。コメントは、ブログドキュメント内に埋め込みドキュメントとして保存されます。

blogsコレクションをフィルタリングするのは非常に簡単ですが、各commentsに埋め込まれているblogをフィルタリングするには、それらすべてをメモリにロードする必要があります(すべてをメモリに取得します) a Ruby array)、各コメントをループして、特定の基準に一致するコメントを返します。

ドット表記を使用して埋め込みドキュメントをフィルタリングする私の努力は失敗し、すべてのサブドキュメントを取り戻しています。

MongoDBにこれらをフィルタリングさせるためのより良い方法はありますか、それともリレーショナルアソシエーションに辞任する必要がありますか? (すべての埋め込みドキュメントをプルバックし、手動でフィルタリングすることは、長期的には非常に集中的になります)

28
kez

現在、説明している方法で埋め込みドキュメントをフィルタリングする方法はありません。ドット表記を使用すると、埋め込まれたドキュメントを照合できますが、ドキュメント全体、親、およびすべてが返されます。返されるフィールドを選択することもできますが、それも実際には役に立ちません。

必要な機能を実装する「仮想コレクション」のケースがあります。自由に投票してください:

http://jira.mongodb.org/browse/SERVER-142

それまでの間、コメントは独自のコレクションとして扱う必要があります。一般に、特定のデータセットを単独で操作する必要がある場合は、それをコレクションにします。他のセットの一部として考えた方がよい場合は、埋め込む方がよいでしょう。

22
Kyle Banker