Ik zou een schemawijziging voorstellen, zodat je daadwerkelijk redelijke query's kunt doen in MongoDB.
Van:
{
"userId": "12347",
"settings": {
"SettingA": "blue",
"SettingB": "blue",
"SettingC": "green"
}
}
naar:
{
"userId": "12347",
"settings": [
{ name: "SettingA", value: "blue" },
{ name: "SettingB", value: "blue" },
{ name: "SettingC", value: "green" }
]
}
Vervolgens kunt u indexeren op "settings.value"
, en voer een zoekopdracht uit zoals:
db.settings.ensureIndex({ "settings.value" : 1})
db.settings.find({ "settings.value" : "blue" })
De wijziging is echt eenvoudig ..., omdat het de naam van de instelling en de instellingswaarde verplaatst naar volledig indexeerbare velden en de lijst met instellingen als een array opslaat.
Als je het schema niet kunt wijzigen, kun je de oplossing van @JohnnyHK proberen, maar wees gewaarschuwd dat dit in feite het slechtste geval is wat betreft prestaties en dat het niet effectief zal werken met indexen.