Jag skulle föreslå en schemaändring så att du faktiskt kan göra rimliga frågor i MongoDB.
Från:
{
"userId": "12347",
"settings": {
"SettingA": "blue",
"SettingB": "blue",
"SettingC": "green"
}
}
till:
{
"userId": "12347",
"settings": [
{ name: "SettingA", value: "blue" },
{ name: "SettingB", value: "blue" },
{ name: "SettingC", value: "green" }
]
}
Sedan kan du indexera på "settings.value"
, och gör en fråga som:
db.settings.ensureIndex({ "settings.value" : 1})
db.settings.find({ "settings.value" : "blue" })
Ändringen är verkligen enkel ... eftersom den flyttar inställningsnamnet och inställningsvärdet till helt indexerbara fält och lagrar listan med inställningar som en array.
Om du inte kan ändra schemat kan du prova @JohnnyHKs lösning, men varnas för att det i princip är värsta fallet när det gäller prestanda och det kommer inte att fungera effektivt med index.