Sugeriría un cambio de esquema para que pueda realizar consultas razonables en MongoDB.
De:
{
"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" }
]
}
Luego, podría indexar en "settings.value"
y haz una consulta como:
db.settings.ensureIndex({ "settings.value" : 1})
db.settings.find({ "settings.value" : "blue" })
El cambio es realmente simple..., ya que mueve el nombre de configuración y el valor de configuración a campos totalmente indexables, y almacena la lista de configuraciones como una matriz.
Si no puede cambiar el esquema, puede probar la solución de @JohnnyHK, pero tenga en cuenta que básicamente es el peor de los casos en términos de rendimiento y no funcionará de manera efectiva con los índices.