MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose Eindeutige Werte in einem verschachtelten Array von Objekten

Ein eindeutiger Index für ein Array-Feld erzwingt, dass derselbe Wert nicht in den Arrays von mehr als einem Dokument erscheinen kann in der Sammlung, verhindert aber nicht, dass derselbe Wert mehr als einmal im Array eines einzelnen Dokuments erscheint. Sie müssen also die Eindeutigkeit sicherstellen, wenn Sie stattdessen Elemente zum Array hinzufügen.

Verwenden Sie das $addToSet Operator, um einem Array einen Wert nur dann hinzuzufügen, wenn der Wert noch nicht vorhanden ist.

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

Wenn jedoch die users array enthält Objekte mit mehreren Eigenschaften und Sie möchten die Eindeutigkeit nur für eines davon sicherstellen (uid in diesem Fall), müssen Sie einen anderen Ansatz wählen:

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

Was das macht, ist den $push zu qualifizieren Update findet nur statt, wenn user.uid existiert noch nicht in der uid Feld eines der Elemente von users . Es ahmt also $addToSet nach Verhalten, aber nur für uid .