Actualización y manejo de arrays en MongoDB

Clase 15 de 30Curso de Introducción a MongoDB

Contenido del curso

Fundamentos de MongoDB

Operadores

Resumen

Cuando un documento en MongoDB contiene un array, los operadores habituales como $set no son la herramienta adecuada para agregar o quitar elementos individuales dentro de esa lista. Para eso existen operadores específicos que permiten manipular arrays de forma precisa y eficiente, y aquí se explican con ejemplos prácticos sobre una colección de inventario.

¿Cómo preparar los datos de inventario para practicar?

Antes de manipular arrays, es necesario contar con documentos que los contengan. Se trabaja con una colección llamada inventory dentro de la base de datos platziStore. Cada documento incluye:

  • Un ID controlado manualmente.
  • Un objeto item con nombre, código y descripción.
  • Un campo quantity.
  • Un array de strings llamado tags (por ejemplo: ["electronics", "school", "book"]).

El dataset se carga ejecutando un script que primero vacía la colección y luego inserta los documentos con insertMany. Es importante ejecutar el dataset antes de cualquier operación [00:50], ya que sin datos la consulta no encontrará coincidencias y el campo modifiedCount será cero.

¿Cómo agregar un elemento a un array con push?

El operador $push agrega un elemento al final de un array dentro de un documento [02:15]. Solo funciona sobre campos de tipo array.

javascript db.inventory.updateOne( { _id: 4 }, { $push: { tags: "headphone" } } )

  • Se selecciona el documento con _id: 4.
  • $push recibe el nombre del array (tags) y el valor a insertar ("headphone").
  • Tras ejecutar la operación, el resultado de matchedCount: 1 y modifiedCount: 1 confirma que el documento fue encontrado y actualizado.

Al correr un find, el array tags del documento cuatro muestra el nuevo valor al final de la lista [03:40].

¿Cómo quitar elementos de un array con pull e in?

El operador $pull hace lo contrario: remueve elementos que coincidan con un valor dentro de un array [04:10]. También es exclusivo para campos de tipo array; si necesitas eliminar un atributo completo de un documento, usarías $unset.

¿Cómo eliminar un solo valor en todos los documentos?

Para quitar el string "book" de todos los documentos se utiliza updateMany con un filtro vacío {}, lo que significa que no hay condición de búsqueda y la operación aplica sobre toda la colección [05:00].

javascript db.inventory.updateMany( {}, { $pull: { tags: "book" } } )

El resultado muestra matchedCount: 5 pero modifiedCount: 3 [05:35]. Esto no es un error: simplemente dos documentos no contenían "book" en su array, así que no hubo nada que modificar en ellos.

¿Cómo eliminar varios valores a la vez con in?

Si necesitas remover más de un elemento, no hace falta ejecutar la operación múltiples veces. Se combina $pull con el operador $in, que permite especificar una lista de valores a buscar y eliminar en una sola instrucción [06:55].

javascript db.inventory.updateMany( {}, { $pull: { tags: { $in: ["appliance", "school"] } } } )

  • $in recibe un array con los valores que se desean remover.
  • El resultado indica matchedCount: 5 y modifiedCount: 5, porque todos los documentos tenían al menos uno de esos valores [08:10].
  • Tras la ejecución, varios documentos quedan con un tags vacío ([]), lo cual confirma que la combinación de ambos operadores funcionó correctamente.

¿Cuándo usar cada operador?

  • $push: agrega un elemento al final de un array.
  • $pull: remueve todos los elementos que coincidan con un valor o condición.
  • $in: realiza una búsqueda interna contra múltiples valores y se combina con $pull para eliminar varios elementos en una sola operación.

Estos tres operadores son fundamentales para mantener la integridad de los arrays dentro de los documentos sin necesidad de reescribir el documento completo. ¿Ya los probaste en tu propia colección? Comparte tu experiencia en los comentarios.