Tente usar o
$
posicional operador
na atualização que identifica um elemento em uma matriz para atualizar sem especificar explicitamente a posição do elemento na matriz, mas isso só corresponderá a um elemento por vez: User.update(
{
"local.email": user,
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
},
{
"$set": {
"devices.$.id": deviceID,
"devices.$.name": deviceName
}
}
);
Dos docs , o operador posicional $ atua como um espaço reservado para o primeiro elemento que corresponde ao documento de consulta e o campo de matriz deve aparecer como parte do documento de consulta, portanto, o documento de consulta
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
contém o
device
array e corresponderá aos documentos em que o device
matriz id
não é igual a deviceID
e o nome não é o mesmo que você está tentando atualizar. Isso corresponderá até mesmo a documentos em que o device
matriz está vazia.