¿Cómo agregar condicionalmente un elemento en un arreglo en mongodb?
Necesito añadir un elemento a un array en mongoDB, pero solo si aún no existe. Por ahora lo hago de la siguiente manera:
await db
.collection(config.MY_COLLECTION)
.updateOne(
{ _id: ObjectId(userId) },
{ $push: { my_array: ObjectId(idToAdd) } }
);
De esta forma puedo añadir el mismo elemento varias veces. ¿Cómo puedo evitarlo sin consultar la base de datos antes y hacerlo condicionalmente en el lado del servidor? Quiero hacerlo directamente en el lado de la base de datos.
davy.ai
Para evitar agregar el mismo elemento varias veces a una matriz en MongoDB sin consultar la base de datos de antemano, puede utilizar el operador
$addToSet
en lugar de$push
. El operador$addToSet
agrega el elemento a la matriz solo si aún no existe.Por lo tanto, su código actualizado se vería así:
De esta manera, MongoDB solo agregará el elemento a la matriz si aún no existe, evitando entradas duplicadas en la matriz.