Saya akan menyarankan perubahan skema sehingga Anda benar-benar dapat melakukan kueri yang masuk akal di MongoDB.
Dari:
{
"userId": "12347",
"settings": {
"SettingA": "blue",
"SettingB": "blue",
"SettingC": "green"
}
}
ke:
{
"userId": "12347",
"settings": [
{ name: "SettingA", value: "blue" },
{ name: "SettingB", value: "blue" },
{ name: "SettingC", value: "green" }
]
}
Kemudian, Anda dapat mengindeks di "settings.value"
, dan lakukan kueri seperti:
db.settings.ensureIndex({ "settings.value" : 1})
db.settings.find({ "settings.value" : "blue" })
Perubahannya sangat sederhana ..., karena memindahkan nama setelan dan nilai setelan ke bidang yang dapat diindeks sepenuhnya, dan menyimpan daftar setelan sebagai larik.
Jika Anda tidak dapat mengubah skema, Anda dapat mencoba solusi @JohnnyHK, tetapi berhati-hatilah bahwa pada dasarnya ini adalah kasus terburuk dalam hal kinerja dan tidak akan bekerja secara efektif dengan indeks.