J'ai le type de données suivant (simplifié un peu de mon cas réel) dans MongoDB:
{
"name":"some name",
"attrs":[
{"n":"subject","v":"Some subject"},
{"n":"description","v":"Some great description"},
{"n":"comments","v":"Comments are here!"},
]
}
Le tableau attrs est un conteneur pour les attributs dynamiques, c'est-à-dire que je ne sais pas à l'avance quel type d'attributs y sont mis. n signifie nom et v signifie valeur.
Le livre MongoDB In Action décrit cela comme une solution pour avoir des attributs dynamiques dans le cas où les attributs sont complètement imprévisibles. Il décrit également que vous pouvez l'indexer comme ceci:
db.mycollection.ensureIndex({"attrs.n":1, "attrs.v":1})
Les requêtes peuvent alors être faites comme ceci:
db.mycollection.find({attrs: {$elemMatch: {n: "subject", v: "Some subject"}}})
Quand je teste cela, j'obtiens de très mauvaises performances. J'ai testé avec mycollection ayant 2 millions de documents et n'ayant aucun index semble fonctionner mieux.
Donc, la question se pose: existe-t-il un moyen d'indexer ce type de paramètre d'attribut dynamique afin que l'indexation donne de bonnes performances? Dans mon cas, il n'est pas possible d'avoir juste des clés comme "sujet" et "description" et de les indexer toutes ...