Saya tidak yakin Anda akan dapat menyelesaikan ini secara elegan dengan skema Anda saat ini; slotTypes
harus berupa larik sub-dokumen, yang memungkinkan $elemMatch
. Anda permintaan untuk bekerja. Saat ini, itu adalah objek dengan tombol numerik.
Artinya, skema dokumen Anda harus seperti:
{
"assetsId": {
"0": "546cf2f8585ffa451bb68369"
},
"slotTypes": [
{ "usage": "json" },
{ "usage": "image" }
]
}
Jika mengubah tata letak data bukanlah suatu pilihan, maka pada dasarnya Anda harus memindai setiap dokumen untuk menemukan kecocokan dengan $where
. Ini lambat, tidak dapat diindeks, dan canggung.
db.objects.find({$where: function() {
for(var key in this.slotTypes) {
if (this.slotTypes[key].usage == "json") return true;
}
return false;
}})
Anda harus membaca dokumentasi tentang $where untuk memastikan Anda memahami peringatannya, dan untuk cinta semua yang suci, bersihkan input Anda ke fungsi tersebut; ini adalah kode langsung yang dijalankan dalam konteks database Anda.