Ich habe folgende Art von Daten (etwas vereinfacht von meinem realen Fall) in MongoDB:
{
"name":"some name",
"attrs":[
{"n":"subject","v":"Some subject"},
{"n":"description","v":"Some great description"},
{"n":"comments","v":"Comments are here!"},
]
}
Das attrs-Array ist ein Container für dynamische Attribute, dh ich weiß vorher nicht, welche Attribute dort abgelegt werden. n steht für Name und v steht für Wert.
Das MongoDB In Action-Buch beschreibt dies als eine Lösung für dynamische Attribute für den Fall, dass die Attribute vollständig vorhersehbar sind. Es wird auch beschrieben, dass Sie es wie folgt indizieren können:
db.mycollection.ensureIndex({"attrs.n":1, "attrs.v":1})
Abfragen können dann folgendermaßen durchgeführt werden:
db.mycollection.find({attrs: {$elemMatch: {n: "subject", v: "Some subject"}}})
Wenn ich das teste, bekomme ich eine sehr schlechte Leistung. Ich habe mit mycollection mit 2 Millionen Dokumenten getestet und ohne Index scheint die Leistung besser zu sein.
Die Frage lautet also: Gibt es eine Möglichkeit, diese Art der dynamischen Attributeinstellung zu indizieren, damit die Indizierung eine gute Leistung erbringt? In meinem Fall ist es nicht möglich, nur Schlüssel wie "Betreff" und "Beschreibung" zu haben und sie alle zu indizieren ...