Sugerowałbym zmianę schematu, aby można było faktycznie wykonywać rozsądne zapytania w MongoDB.
Od:
{
"userId": "12347",
"settings": {
"SettingA": "blue",
"SettingB": "blue",
"SettingC": "green"
}
}
do:
{
"userId": "12347",
"settings": [
{ name: "SettingA", value: "blue" },
{ name: "SettingB", value: "blue" },
{ name: "SettingC", value: "green" }
]
}
Następnie możesz zaindeksować "settings.value"
i wykonaj zapytanie takie jak:
db.settings.ensureIndex({ "settings.value" : 1})
db.settings.find({ "settings.value" : "blue" })
Zmiana jest naprawdę prosta... ponieważ przenosi nazwę ustawienia i wartość ustawienia do w pełni indeksowanych pól i przechowuje listę ustawień w postaci tablicy.
Jeśli nie możesz zmienić schematu, możesz wypróbować rozwiązanie @JohnnyHK, ale pamiętaj, że jest to w zasadzie najgorszy przypadek pod względem wydajności i nie będzie działał efektywnie z indeksami.