Probeer de positionele $ te gebruiken operator
in de update die een element in een array identificeert dat moet worden bijgewerkt zonder expliciet de positie van het element in de array op te geven, maar dit zal altijd maar met één element tegelijk overeenkomen:
User.update(
{
"local.email": user,
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
},
{
"$set": {
"devices.$.id": deviceID,
"devices.$.name": deviceName
}
}
);
Van de docs , de positionele $ operator fungeert als een tijdelijke aanduiding voor het eerste element dat overeenkomt met het querydocument, en het matrixveld moet verschijnen als onderdeel van het querydocument, vandaar het querydocument
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
bevat het device array en komt overeen met die documenten waar het device array id is niet gelijk aan deviceID en de naam is niet hetzelfde als de naam die u probeert bij te werken. Dit komt zelfs overeen met documenten waar het device array is leeg.