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
.