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.