Du kan inte göra detta specifikt, du kan inte indexera på nyckelns värde.
En lösning
Du kan dock indexera objekt i en array.
Låt oss anta att din data ser ut så här:
items:
[
{ Key: "Name", Value: "Peter", Type:String },
{ Key: "Age", Value: "18", Type:int },
{ Key: "City", Value: "San Jose", Type:String },
...30 to 40 items.
]
Du skulle göra följande för att skapa ett index på items.Key
:
db.foo.ensureIndex( { 'items.Key' } )
När du gör följande kommer du att använda indexet:
db.foo.find( { 'items.Key' : "City", 'items.value' : "San Jose" } )
Detta kommer att begränsa sökningen till endast de objekt som har Key = "City"
. Om detta är allt, så hjälper det förmodligen inte.
Alternativ lösning
Varför är items
en array? Kan du inte strukturera data så här:
items:
{
"Name" : { Value: "Peter", Type:String },
"Age" : { Value: "18", Type:int },
"City" : { Value: "San Jose", Type:String },
...30 to 40 items.
}
Nu kan du indexera på items.City.Value
, vilket är vad du letade efter från början. Detta gör också datastrukturen en hel del mindre.
Beroende på typen av dina data kanske du också vill titta på glesa index för att hjälpa dig att kontrollera storleken på ditt index.