Je suggérerais un changement de schéma afin que vous puissiez réellement effectuer des requêtes raisonnables dans MongoDB.
De :
{
"userId": "12347",
"settings": {
"SettingA": "blue",
"SettingB": "blue",
"SettingC": "green"
}
}
à :
{
"userId": "12347",
"settings": [
{ name: "SettingA", value: "blue" },
{ name: "SettingB", value: "blue" },
{ name: "SettingC", value: "green" }
]
}
Ensuite, vous pouvez indexer sur "settings.value"
, et faites une requête comme :
db.settings.ensureIndex({ "settings.value" : 1})
db.settings.find({ "settings.value" : "blue" })
Le changement est vraiment simple..., car il déplace le nom et la valeur du paramètre vers des champs entièrement indexables, et stocke la liste des paramètres sous forme de tableau.
Si vous ne pouvez pas modifier le schéma, vous pouvez essayer la solution de @JohnnyHK, mais sachez qu'il s'agit essentiellement du pire des cas en termes de performances et qu'il ne fonctionnera pas efficacement avec les index.