Navrhoval bych změnu schématu, abyste mohli skutečně provádět rozumné dotazy v MongoDB.
Od:
{
"userId": "12347",
"settings": {
"SettingA": "blue",
"SettingB": "blue",
"SettingC": "green"
}
}
komu:
{
"userId": "12347",
"settings": [
{ name: "SettingA", value: "blue" },
{ name: "SettingB", value: "blue" },
{ name: "SettingC", value: "green" }
]
}
Pak byste mohli indexovat na "settings.value"
a zadejte dotaz jako:
db.settings.ensureIndex({ "settings.value" : 1})
db.settings.find({ "settings.value" : "blue" })
Změna je opravdu jednoduchá..., protože přesune název nastavení a hodnotu nastavení do plně indexovatelných polí a uloží seznam nastavení jako pole.
Pokud schéma nemůžete změnit, můžete zkusit řešení @JohnnyHK, ale mějte na paměti, že jde v zásadě o nejhorší případ z hlediska výkonu a nebude efektivně fungovat s indexy.