Не можете да направите това конкретно, не можете да индексирате стойността на ключа.
Едно решение
Можете обаче да индексирате елементи в масив.
Да приемем, че вашите данни изглеждат така:
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
, което е това, което търсихте на първо място. Това също прави структурата на данните доста по-малка.
В зависимост от естеството на вашите данни може също да искате да разгледате разредени индекси за да контролирате размера на вашия индекс.