sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose Unika värden i kapslad array av objekt

Ett unikt index på ett arrayfält tvingar fram att samma värde inte kan visas i arrayerna för mer än ett dokument i samlingen, men förhindrar inte att samma värde visas mer än en gång i ett enda dokuments array. Så du måste säkerställa unikhet när du lägger till element till arrayen istället.

Använd $addToSet operatorn för att lägga till ett värde till en array endast om värdet inte redan finns.

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

Men om users array innehåller objekt med flera egenskaper och du vill säkerställa unikhet över bara en av dem (uid i det här fallet), måste du ta ett annat tillvägagångssätt:

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

Vad det gör är att kvalificera $push uppdatering sker endast om user.uid finns inte redan i uid fältet för något av elementen i users . Så det härmar $addToSet beteende, men bara för uid .



  1. Konvertera HBase ACL:er till Ranger-policyer

  2. C#/.NET-klient för Redis

  3. MongoDB Matcha en array med $type?

  4. HBase-regioner slås samman