Zkuste použít poziční $
operátor
v aktualizaci, která identifikuje prvek v poli, který se má aktualizovat, aniž by explicitně specifikoval polohu prvku v poli, ale vždy se bude shodovat pouze s jedním prvkem:
User.update(
{
"local.email": user,
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
},
{
"$set": {
"devices.$.id": deviceID,
"devices.$.name": deviceName
}
}
);
Z dokumentů , poziční operátor $ funguje jako zástupný symbol pro první prvek, který odpovídá dokumentu dotazu, a pole pole se musí objevit jako součást dokumentu dotazu, tedy dokumentu dotazu
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
obsahuje device
pole a bude odpovídat těm dokumentům, kde je device
pole id
se nerovná deviceID
a název není stejný jako název, který se pokoušíte aktualizovat. To bude dokonce odpovídat dokumentům, kde je device
pole je prázdné.