Nie możesz tego zrobić konkretnie, nie możesz indeksować wartości klucza.
Jedno rozwiązanie
Możesz jednak indeksować elementy w tablicy.
Załóżmy, że Twoje dane wyglądają tak:
items:
[
{ Key: "Name", Value: "Peter", Type:String },
{ Key: "Age", Value: "18", Type:int },
{ Key: "City", Value: "San Jose", Type:String },
...30 to 40 items.
]
Aby utworzyć indeks na items.Key
, należy wykonać następujące czynności::
db.foo.ensureIndex( { 'items.Key' } )
Gdy wykonasz następujące czynności, użyjesz indeksu:
db.foo.find( { 'items.Key' : "City", 'items.value' : "San Jose" } )
Spowoduje to zawężenie wyszukiwania tylko do tych elementów, które mają Key = "City"
. Jeśli to wszystko, to prawdopodobnie nie pomoże.
Alternatywne rozwiązanie
Dlaczego items
tablica? Czy nie możesz uporządkować danych w ten sposób:
items:
{
"Name" : { Value: "Peter", Type:String },
"Age" : { Value: "18", Type:int },
"City" : { Value: "San Jose", Type:String },
...30 to 40 items.
}
Teraz możesz indeksować items.City.Value
, którego szukałeś w pierwszej kolejności. To również sprawia, że struktura danych jest nieco mniejsza.
W zależności od charakteru danych możesz również spojrzeć na rozrzedzone indeksy aby pomóc kontrolować rozmiar indeksu.