これを具体的に行うことはできません。キーの値にインデックスを付けることはできません。
1つのソリューション
ただし、配列内のアイテムにインデックスを付けることはできます。
データが次のようになっていると仮定しましょう:
items:
[
{ Key: "Name", Value: "Peter", Type:String },
{ Key: "Age", Value: "18", Type:int },
{ Key: "City", Value: "San Jose", Type:String },
...30 to 40 items.
]
items.Key
にインデックスを作成するには、次のようにします。 :
db.foo.ensureIndex( { 'items.Key' } )
次のことを行うときは、インデックスを使用します:
db.foo.find( { 'items.Key' : "City", 'items.value' : "San Jose" } )
これにより、Key = "City"
を持つアイテムのみに検索が絞り込まれます。 。これがすべてである場合、これはおそらく役に立たないでしょう。
代替ソリューション
items
はなぜですか 配列?このようにデータを構造化することはできません:
items:
{
"Name" : { Value: "Peter", Type:String },
"Age" : { Value: "18", Type:int },
"City" : { Value: "San Jose", Type:String },
...30 to 40 items.
}
これで、items.City.Value
でインデックスを作成できます 、そもそもあなたが探していたものです。これにより、データ構造もかなり小さくなります。
データの性質によっては、スパースインデックスも確認することをお勧めします。 インデックスのサイズを制御するのに役立ちます。