sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongoose Unikke værdier i indlejret array af objekter

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 .



  1. Sådan gendannes en specifik samling i MongoDB ved hjælp af logisk sikkerhedskopiering

  2. Skriv din første rådgiver

  3. Sådan samles efter år-måned-dag i en anden tidszone

  4. Mongoose:ObjectId-sammenligninger mislykkes inkonsekvent