Een unieke index op een arrayveld zorgt ervoor dat dezelfde waarde niet kan voorkomen in de arrays van meer dan één document in de verzameling, maar voorkomt niet dat dezelfde waarde meer dan één keer voorkomt in de array van een enkel document. U moet dus zorgen voor uniciteit als u in plaats daarvan elementen aan de array toevoegt.
Gebruik de $addToSet
operator om alleen een waarde aan een array toe te voegen als de waarde nog niet aanwezig is.
Group.updateOne({name: 'admin'}, {$addToSet: {users: userOid}}, ...
Als de users
array bevat objecten met meerdere eigenschappen en u wilt ervoor zorgen dat slechts één ervan uniek is (uid
in dit geval), dan moet u een andere aanpak kiezen:
var user = { uid: userOid, ... };
Group.updateOne(
{name: 'admin', 'users.uid': {$ne: user.uid}},
{$push: {users: user}},
function(err, numAffected) { ... });
Wat dat doet, is de $push
. kwalificeren update vindt alleen plaats als user.uid
bestaat nog niet in de uid
veld van een van de elementen van users
. Dus het bootst $addToSet
na gedrag, maar voor slechts uid
.