Essayez d'utiliser le positionnel $
opérateur
dans la mise à jour qui identifie un élément dans un tableau à mettre à jour sans spécifier explicitement la position de l'élément dans le tableau, mais cela ne correspondra jamais qu'à un élément à la fois :
User.update(
{
"local.email": user,
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
},
{
"$set": {
"devices.$.id": deviceID,
"devices.$.name": deviceName
}
}
);
À partir de la docs , l'opérateur positionnel $ agit comme un espace réservé pour le premier élément qui correspond au document de requête, et le champ de tableau doit apparaître dans le cadre du document de requête, d'où le document de requête
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
contient le device
array et correspondra aux documents où le device
tableau id
n'est pas égal à deviceID
et le nom n'est pas le même que le nom que vous essayez de mettre à jour. Cela correspondra même aux documents où le device
tableau est vide.