Saya memiliki koleksi bernama perangkat dengan sekitar 50.000 dokumen. Saya mencoba menanyakan array rute dalam setiap dokumen dan mengembalikan dokumen jika beberapa kondisi terpenuhi untuk elemen array individual. Masalahnya adalah tampaknya Mongo memberikan jawaban yang memenuhi beberapa kondisi untuk elemen array yang berbeda.
Contoh data:
{
"_id": 0,
"name": "example1",
"serial": "123456",
"routes": [
{
"description": "8989",
"zone": "front"
},
{
"description": "1221",
"zone": "back"
}
]
},
{
"_id": 1,
"name": "example2",
"serial": "987654",
"routes": [
{
"description": "1515",
"zone": "front"
},
{
"description": "8989",
"zone": "side"
}
]
}
Saya sudah mencoba variasi .find() sederhana tetapi tidak berhasil
db.devices.find({"routes.description":"8989", "routes.zone":"front"})
db.devices.find({"$and": [{"routes.description":"8989"}, {"routes.zone":"front"}]})
Saya juga telah mencoba agregasi yang sepertinya gagal karena pemahaman saya tentangnya masih dasar. Hasil yang diinginkan untuk kueri di atas adalah satu dokumen (_id:0) dan bukan kedua dokumen.
{ "_id" : 0, "name" : "example1", "serial" : "123456", "routes" : [ { "description" : "8989", "zone" : "front" }, { "description" : "1221", "zone" : "back" } ] }
Selain itu, kemampuan untuk menanyakan array menggunakan operator $in juga diinginkan. Misalnya, keluaran yang diinginkan dari kueri berikut adalah kedua dokumen karena keduanya memiliki rute yang cocok dengan zone:front dan deskripsi yang ada dalam daftar.
db.devices.find({"$and": [{"routes.description": { $in: ["8989", "1515"] }}, {"routes.zone":"front"}]})