Setelah menjalankan beberapa kueri, saya sampai pada kesimpulan bahwa $in tidak berfungsi untuk larik larik .
Anda dapat menggunakan $elemMatch
sebagai gantinya dan itu akan berhasil, tetapi membuat frustrasi karena dokumentasi MongoDB tidak memperingatkannya.
Saya membuat dokumen ini:
{
"_id": "51cb12857124a215940cf2d4",
"level1": [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
],
"items": [
"item20",
"item21"
]
}
Perhatikan bahwa bidang "item" adalah larik string dan kueri ini berfungsi dengan baik:
db.nested.findOne({"items":{"$in":["item20"]} })
Sekarang, "level1.0" juga merupakan larik string, satu-satunya perbedaan adalah ia berada di dalam larik lain. Kueri ini seharusnya berfungsi tetapi tidak:
db.nested.findOne({"level1.0":{"$in":["item00"]} })
Satu-satunya cara untuk mendapatkan hasilnya adalah menggunakan $elemMatch:
db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })
Jadi $elemMatch
memecahkan masalah, tetapi solusi sebenarnya adalah memperbarui dokumentasi MongoDB untuk menyatakan bahwa $in
tidak berfungsi untuk array array. Mungkin Anda harus mengajukan permintaan ke 10gen.