Что-то вроде -> Индексный ключ: Имя, Индексный ключ: Город и не все.
Вы не можете сделать это специально, вы не можете индексировать значение ключа.
Одно решение
Однако вы можете индексировать элементы в массиве.
Предположим, что ваши данные выглядят так:
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
, что вы и искали. Это также делает структуру данных немного меньше.
В зависимости от характера ваших данных, вы также можете посмотреть разреженных индексов , чтобы помочь контролировать размер вашего индекса.