Intente usar el posicional $
operador
en la actualización que identifica un elemento en una matriz para actualizar sin especificar explícitamente la posición del elemento en la matriz, pero esto solo coincidirá con un elemento a la vez:
User.update(
{
"local.email": user,
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
},
{
"$set": {
"devices.$.id": deviceID,
"devices.$.name": deviceName
}
}
);
De los docs , el operador posicional $ actúa como marcador de posición para el primer elemento que coincide con el documento de consulta, y el campo de matriz debe aparecer como parte del documento de consulta, por lo tanto, el documento de consulta
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
contiene el device
array y coincidirá con aquellos documentos donde el device
matriz id
no es igual a deviceID
y el nombre no es el mismo que el nombre que está intentando actualizar. Esto incluso coincidirá con los documentos en los que el device
la matriz está vacía.