Jedinečný index v poli pole vyžaduje, aby se stejná hodnota nemohla objevit v polích více než jednoho dokumentu v kolekci, ale nezabrání tomu, aby se stejná hodnota objevila více než jednou v poli jednoho dokumentu. Při přidávání prvků do pole tedy musíte zajistit jedinečnost.
Použijte $addToSet operátor k přidání hodnoty do pole pouze v případě, že hodnota již není přítomna.
Group.updateOne({name: 'admin'}, {$addToSet: {users: userOid}}, ...
Pokud však users pole obsahuje objekty s více vlastnostmi a vy chcete zajistit jedinečnost pouze jedné z nich (uid v tomto případě), pak musíte použít jiný přístup:
var user = { uid: userOid, ... };
Group.updateOne(
{name: 'admin', 'users.uid': {$ne: user.uid}},
{$push: {users: user}},
function(err, numAffected) { ... });
Co to dělá, je kvalifikovat $push aktualizace proběhne pouze v případě, že user.uid ještě neexistuje v uid pole kteréhokoli z prvků users . Takže to napodobuje $addToSet chování, ale pouze pro uid .