Coba gunakan posisi $ operator
dalam pembaruan yang mengidentifikasi elemen dalam larik untuk diperbarui tanpa secara eksplisit menentukan posisi elemen dalam larik, tetapi ini hanya akan cocok dengan satu elemen pada satu waktu:
User.update(
{
"local.email": user,
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
},
{
"$set": {
"devices.$.id": deviceID,
"devices.$.name": deviceName
}
}
);
Dari dokumen , operator $ posisional bertindak sebagai pengganti untuk elemen pertama yang cocok dengan dokumen kueri, dan bidang larik harus muncul sebagai bagian dari dokumen kueri sehingga dokumen kueri
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
berisi device array dan akan cocok dengan dokumen-dokumen di mana device larik id tidak sama dengan deviceID dan namanya tidak sama dengan nama yang Anda coba perbarui. Ini bahkan akan cocok dengan dokumen di mana device array kosong.