MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

La mise à jour de Mongoose 'ne peut pas utiliser la partie (..) pour traverser l'élément

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.