es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  ,

Answer

  1. Avatar for 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í:

    await db
      .collection(config.MY_COLLECTION)
      .updateOne(
        { _id: ObjectId(userId) },
        { $addToSet: { my_array: ObjectId(idToAdd) } }
      );
    

    De esta manera, MongoDB solo agregará el elemento a la matriz si aún no existe, evitando entradas duplicadas en la matriz.

Comments are closed.