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

Mongoose Valeurs uniques dans un tableau imbriqué d'objets

Un index unique sur un champ de tableau impose que la même valeur ne puisse pas apparaître dans les tableaux de plus d'un document dans la collection, mais n'empêche pas la même valeur d'apparaître plus d'une fois dans le tableau d'un même document. Vous devez donc garantir l'unicité lorsque vous ajoutez des éléments au tableau à la place.

Utilisez le $addToSet opérateur pour ajouter une valeur à un tableau uniquement si la valeur n'est pas déjà présente.

Group.updateOne({name: 'admin'}, {$addToSet: {users: userOid}}, ...

Cependant, si les users array contient des objets avec plusieurs propriétés et vous souhaitez garantir l'unicité sur une seule d'entre elles (uid dans ce cas), alors vous devez adopter une autre approche :

var user = { uid: userOid, ... };
Group.updateOne(
    {name: 'admin', 'users.uid': {$ne: user.uid}}, 
    {$push: {users: user}},
    function(err, numAffected) { ... });

Cela qualifie le $push la mise à jour n'a lieu que si user.uid n'existe pas déjà dans le uid champ de l'un des éléments de users . Il imite donc $addToSet comportement, mais uniquement pour uid .