Опитайте да използвате позиционния $
оператор
в актуализацията, която идентифицира елемент в масив за актуализиране, без изрично да указва позицията на елемента в масива, но това винаги ще съответства само на един елемент наведнъж:
User.update(
{
"local.email": user,
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
},
{
"$set": {
"devices.$.id": deviceID,
"devices.$.name": deviceName
}
}
);
От документи , позиционният оператор $ действа като контейнер за първия елемент, който съответства на документа на заявката, а полето за масив трябва да се появи като част от документа на заявката, следователно документът на заявката
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
съдържа device
масив и ще съответства на тези документи, където device
масив id
не е равно на deviceID
и името не е същото като името, което се опитвате да актуализирате. Това дори ще съответства на документи, където device
масивът е празен.