Suggerirei una modifica dello schema in modo da poter effettivamente eseguire query ragionevoli in MongoDB.
Da:
{
"userId": "12347",
"settings": {
"SettingA": "blue",
"SettingB": "blue",
"SettingC": "green"
}
}
a:
{
"userId": "12347",
"settings": [
{ name: "SettingA", value: "blue" },
{ name: "SettingB", value: "blue" },
{ name: "SettingC", value: "green" }
]
}
Quindi, puoi indicizzare su "settings.value"
e fai una query come:
db.settings.ensureIndex({ "settings.value" : 1})
db.settings.find({ "settings.value" : "blue" })
La modifica è davvero semplice... poiché sposta il nome e il valore dell'impostazione in campi completamente indicizzabili e memorizza l'elenco delle impostazioni come un array.
Se non riesci a modificare lo schema, puoi provare la soluzione di @JohnnyHK, ma tieni presente che è sostanzialmente il caso peggiore in termini di prestazioni e non funzionerà efficacemente con gli indici.