sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongoose Valores únicos en una matriz anidada de objetos

Un índice único en un campo de matriz impone que el mismo valor no puede aparecer en las matrices de más de un documento en la colección, pero no evita que el mismo valor aparezca más de una vez en la matriz de un solo documento. Por lo tanto, debe garantizar la exclusividad al agregar elementos a la matriz.

Usa el $addToSet operador para agregar un valor a una matriz solo si el valor aún no está presente.

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

Sin embargo, si los users matriz contiene objetos con múltiples propiedades y desea garantizar la exclusividad de solo uno de ellos (uid en este caso), entonces debe adoptar otro enfoque:

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

Lo que hace es calificar el $push actualización para que solo ocurra si user.uid aún no existe en el uid campo de cualquiera de los elementos de users . Entonces imita a $addToSet comportamiento, pero solo para uid .