Eu sugiro uma mudança de esquema para que você possa realmente fazer consultas razoáveis no MongoDB.
A partir de:
{
"userId": "12347",
"settings": {
"SettingA": "blue",
"SettingB": "blue",
"SettingC": "green"
}
}
para:
{
"userId": "12347",
"settings": [
{ name: "SettingA", value: "blue" },
{ name: "SettingB", value: "blue" },
{ name: "SettingC", value: "green" }
]
}
Então, você pode indexar em
"settings.value"
, e faça uma consulta como:db.settings.ensureIndex({ "settings.value" : 1})
db.settings.find({ "settings.value" : "blue" })
A mudança é realmente simples..., pois move o nome da configuração e o valor da configuração para campos totalmente indexáveis e armazena a lista de configurações como uma matriz.
Se você não puder alterar o esquema, tente a solução do @JohnnyHK, mas esteja avisado de que é basicamente o pior caso em termos de desempenho e não funcionará efetivamente com índices.