Prova a utilizzare il posizionale $
operatore
nell'aggiornamento che identifica un elemento in un array da aggiornare senza specificare esplicitamente la posizione dell'elemento nell'array, ma questo corrisponderà sempre e solo a un elemento alla volta:
User.update(
{
"local.email": user,
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
},
{
"$set": {
"devices.$.id": deviceID,
"devices.$.name": deviceName
}
}
);
Dai documenti , l'operatore posizionale $ funge da segnaposto per il primo elemento che corrisponde al documento della query e il campo dell'array deve apparire come parte del documento della query, quindi il documento della query
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
contiene il device
array e corrisponderà a quei documenti in cui il device
matrice id
non è uguale a deviceID
e il nome non è lo stesso del nome che stai tentando di aggiornare. Questo corrisponderà anche ai documenti in cui il device
l'array è vuoto.