Prøv at bruge positionelle $
operatør
i opdateringen, som identificerer et element i et array, der skal opdateres uden eksplicit at specificere elementets position i arrayet, men dette vil kun matche ét element ad gangen:
User.update(
{
"local.email": user,
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
},
{
"$set": {
"devices.$.id": deviceID,
"devices.$.name": deviceName
}
}
);
Fra dokumenterne , den positionelle $-operator fungerer som en pladsholder for det første element, der matcher forespørgselsdokumentet, og array-feltet skal vises som en del af forespørgselsdokumentet og derfor forespørgselsdokumentet
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
indeholder device
array og vil matche de dokumenter, hvor device
array id
er ikke lig med deviceID
og navnet er ikke det samme som det navn, du forsøger at opdatere. Dette vil endda matche dokumenter, hvor device
arrayet er tomt.