Tengo el siguiente tipo de datos (simplificado un poco de mi caso real) en MongoDB:
{
"name":"some name",
"attrs":[
{"n":"subject","v":"Some subject"},
{"n":"description","v":"Some great description"},
{"n":"comments","v":"Comments are here!"},
]
}
La matriz attrs es un contenedor de atributos dinámicos, es decir, no sé de antemano qué tipo de atributos se colocan allí. n significa nombre y v representa valor.
El libro MongoDB In Action describe esto como una solución para tener atributos dinámicos en el caso de que los atributos sean completamente actualizables. También describe que puede indexarlo así:
db.mycollection.ensureIndex({"attrs.n":1, "attrs.v":1})
Las consultas se pueden hacer así:
db.mycollection.find({attrs: {$elemMatch: {n: "subject", v: "Some subject"}}})
Cuando pruebo esto, obtengo un rendimiento muy pobre. Probé con mycollection con 2 millones de documentos y sin índice parece funcionar mejor.
Entonces, la pregunta es, ¿hay alguna manera de indexar este tipo de configuración dinámica de atributos para que la indexación ofrezca un buen rendimiento? En mi caso, no es factible simplemente tener claves como "asunto" y "descripción" e indexarlas todas ...