Бих предложил промяна на схемата, за да можете действително да правите разумни заявки в MongoDB.
От:
{
"userId": "12347",
"settings": {
"SettingA": "blue",
"SettingB": "blue",
"SettingC": "green"
}
}
до:
{
"userId": "12347",
"settings": [
{ name: "SettingA", value: "blue" },
{ name: "SettingB", value: "blue" },
{ name: "SettingC", value: "green" }
]
}
След това можете да индексирате "settings.value"
, и направете заявка като:
db.settings.ensureIndex({ "settings.value" : 1})
db.settings.find({ "settings.value" : "blue" })
Промяната наистина е проста ..., тъй като премества името на настройката и стойността на настройката в напълно индексируеми полета и съхранява списъка с настройки като масив.
Ако не можете да промените схемата, можете да опитате решението на @JohnnyHK, но бъдете предупредени, че по същество това е най-лошият случай по отношение на производителността и няма да работи ефективно с индекси.