Ho i seguenti tipi di dati (un po 'semplificati dal mio caso reale) in MongoDB:
{
"name":"some name",
"attrs":[
{"n":"subject","v":"Some subject"},
{"n":"description","v":"Some great description"},
{"n":"comments","v":"Comments are here!"},
]
}
L'array attrs è un contenitore per attributi dinamici, cioè non so in anticipo quale tipo di attributi vengono messi lì. n sta per nome e v sta per valore.
Il libro MongoDB In Action lo descrive come una soluzione per avere attributi dinamici nel caso in cui gli attributi siano completamente ridimensionabili. Descrive inoltre che è possibile indicizzarlo in questo modo:
db.mycollection.ensureIndex({"attrs.n":1, "attrs.v":1})
Le query possono quindi essere eseguite in questo modo:
db.mycollection.find({attrs: {$elemMatch: {n: "subject", v: "Some subject"}}})
Quando provo questo, ottengo prestazioni molto scarse. Ho provato con mycollection con 2 milioni di documenti e non avere un indice che sembra funzionare meglio.
Quindi, la domanda è: c'è un modo per indicizzare questo tipo di impostazione dinamica degli attributi in modo che l'indicizzazione offra buone prestazioni? Nel mio caso, non è possibile avere solo chiavi come "soggetto" e "descrizione" e indicizzarle tutte ...