Et unikt indeks på et arrayfelt tvinger, at den samme værdi ikke kan vises i arrays af mere end ét dokument i samlingen, men forhindrer ikke, at den samme værdi vises mere end én gang i et enkelt dokuments array. Så du skal sikre unikhed, når du tilføjer elementer til arrayet i stedet for.
Brug $addToSet operator for kun at tilføje en værdi til et array, hvis værdien ikke allerede er til stede.
Group.updateOne({name: 'admin'}, {$addToSet: {users: userOid}}, ...
Men hvis users array indeholder objekter med flere egenskaber, og du ønsker at sikre unikhed over kun én af dem (uid i dette tilfælde), så skal du tage en anden tilgang:
var user = { uid: userOid, ... };
Group.updateOne(
{name: 'admin', 'users.uid': {$ne: user.uid}},
{$push: {users: user}},
function(err, numAffected) { ... });
Det, der gør, er at kvalificere $push opdatering til kun at ske, hvis user.uid eksisterer ikke allerede i uid felt af ethvert af elementerne i users . Så det efterligner $addToSet adfærd, men kun for uid .