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

Mongoose Valori univoci nella matrice nidificata di oggetti

Un indice univoco su un campo array impone che lo stesso valore non possa apparire negli array di più di un documento nella raccolta, ma non impedisce che lo stesso valore venga visualizzato più di una volta nell'array di un singolo documento. Quindi è necessario garantire l'unicità mentre si aggiungono elementi all'array.

Usa il $addToSet per aggiungere un valore a un array solo se il valore non è già presente.

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

Tuttavia, se gli users array contiene oggetti con più proprietà e si desidera garantire l'unicità solo su uno di essi (uid in questo caso), allora devi adottare un altro approccio:

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

Ciò che fa è qualificare il $push aggiornamento in modo che si verifichi solo se user.uid non esiste già nel uid campo di uno qualsiasi degli elementi di users . Quindi imita $addToSet comportamento, ma solo per uid .