Försök att använda positionella $
operatör
i uppdateringen som identifierar ett element i en array som ska uppdateras utan att explicit specificera elementets position i arrayen, men detta kommer bara att matcha ett element åt gången:
User.update(
{
"local.email": user,
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
},
{
"$set": {
"devices.$.id": deviceID,
"devices.$.name": deviceName
}
}
);
Från dokumenten , den positionella $-operatorn fungerar som en platshållare för det första elementet som matchar frågedokumentet, och arrayfältet måste visas som en del av frågedokumentet, därav frågedokumentet
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
innehåller device
array och kommer att matcha de dokument där device
array id
är inte lika med deviceID
och namnet är inte detsamma som namnet som du försöker uppdatera. Detta kommer även att matcha dokument där device
arrayen är tom.