3

MongoDB: get documents by tagsを見つけたチュートリアルのいくつかを調べてみると、ほとんどのタグはアイテムのリストとして作成されているようです。私のスキーマでは、動的タグ (キーと値のペア) が必要なため、コレクション内のすべてのアイテムには、次のエントリのようなタグ フィールドがあります。

{"tags" : {"key1" : "value1", "key2", "value2"}}

ただし、タグ フィールド内のキーにインデックスを付けたいと思います。キーは任意である可能性があるため、これは(マルチキーインデックスを使用しても)不可能ですか?

次のようにスキーマを移行する必要がありますか?

{"tags" : [{"key1" : "value1"}, {"key2" : "value2"}]}

もしそうなら、私のインデックスは次のようになります:

db.foo.ensureIndex({"tags" : 1})

ここで提案されているように:

http://www.mongodb.org/display/DOCS/Using+Multikeys+to+Simulate+a+Large+Number+of+Indexes

4

1 に答える 1

2

はい、タグとしてサブドキュメントの配列にインデックスを付けることができますが、常に完全なサブドキュメントを照会する必要があります。上記のようにインデックスを作成します

db.foo.ensureIndex({'tags': 1})

そしてクエリ:

db.foo.find('tags': {'key1': 'value1'}) 

これはインデックスを使用し、その特定のサブドキュメントをタグ配列に持つすべてのドキュメントを返します。

于 2012-08-27T19:03:27.070 に答える