Masalahnya di sini adalah kesalahpahaman Anda tentang hal-hal yang berhubungan.
Ketika Anda melakukan "outerArray.field.innerArray": { $in: [ 1, 3 ] }
ke dalam kueri Anda, Anda tidak hanya mendapatkan innerArray
mana memiliki 1 atau 3. Anda mendapatkan dokumen di mana ada array ini.
Jadi Anda menanyakan seluruh dokumen.
Anda harus menggunakan arrayFilter
untuk memperbarui nilai saat filter cocok.
Jadi, Jika saya sudah memahami Anda dengan benar, pertanyaan yang Anda inginkan adalah:
db.collection.update(
{}, //Empty object to find all documents
{
$push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
"arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})
Contoh di sini
Perhatikan bagaimana objek pertama menjadi update
kosong. Anda harus meletakkan bidang di sana agar sesuai dengan dokumen (bukan larik, dokumen).
Jika Anda ingin memperbarui hanya satu dokumen Anda harus mengisi terlebih dahulu objek (objek kueri) dengan nilai yang Anda inginkan, misalnya:{"_id": 11}
.