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.