Operaciones esenciales en MongoDB
MongoDB es una base de datos NoSQL orientada a documentos que permite manipular datos de forma flexible mediante una serie de operadores de actualización. En este módulo aprenderás a usar…

Si se desea cambiar el nombre del atributo "comuna" a "comu" dentro del subdocumento "direccion", ¿qué operador de MongoDB se utiliza?
Después de renombrar "comuna" a "comu", ¿qué comando elimina de forma segura el atributo "comu" solo si existe?
Al insertar el documento con _id:1, ¿qué estructura de datos representa el campo "usuario"?
¿Qué comando modifica el precio de la suscripción del primer usuario a 5000?
Para agregar el atributo "tipo" con valor "vip" dentro de la suscripción, ¿cuál es la ruta de acceso correcta?
¿Qué operador elimina el campo "precio" de la suscripción sin afectar otros atributos?
Al ejecutar $push sobre "detalle.0.comentarios.0.textos" con el valor "ejemplo", ¿qué ocurre?
Si se desea cambiar el tercer elemento del arreglo "textos" del primer comentario a "TEXTO CAMBIADO", ¿qué expresión se usa?
¿Cuál es la forma correcta de eliminar la cadena "TEXTO CAMBIADO" del arreglo "textos" del primer comentario?
¿Qué diferencia fundamental existe entre $updateOne y $updateMany en los ejemplos presentados?
Operaciones esenciales en MongoDB
MongoDB es una base de datos NoSQL orientada a documentos que permite manipular datos de forma flexible mediante una serie de operadores de actualización. En este módulo aprenderás a usar los comandos más comunes para modificar documentos, subdocumentos y arreglos, y comprenderás cómo estructurar consultas seguras y eficientes.
1. Actualizar subatributos con $set y updateMany
Cuando necesitas agregar o modificar un campo dentro de un subdocumento, el operador $set es la herramienta adecuada. A diferencia de $push, que solo sirve para agregar elementos a un arreglo, $set sobrescribe o crea la ruta especificada.
Ejemplo práctico:
- Objetivo: agregar el subatributo comuna con valor "Rancagua" al campo direccion de todos los documentos cuyo nombre sea "Juan".
- Comando correcto:
db.personas.updateMany(
{ nombre: "Juan" },
{ $set: { "direccion.comuna": "Rancagua" } }
)
Este comando recorre todos los documentos que cumplen la condición (nombre: "Juan") y asigna el valor indicado a la ruta direccion.comuna. Si el campo no existía, MongoDB lo crea automáticamente.
2. Renombrar atributos con $rename
En ocasiones es necesario cambiar el nombre de un campo sin perder su contenido. El operador $rename permite hacerlo de forma atómica.
Ejemplo:
db.personas.updateMany(
{},
{ $rename: { "direccion.comuna": "direccion.comu" } }
)
Con este comando, cada documento que contenga direccion.comuna pasará a tener direccion.comu, manteniendo el valor original.
3. Eliminar campos de forma segura con $unset
Para remover un atributo solo si existe, se combina $unset con una condición $exists. De esta manera evitamos errores al intentar borrar un campo inexistente.
db.personas.updateMany(
{ "direccion.comu": { $exists: true } },
{ $unset: { "direccion.comu": "" } }
)
El valor asignado a $unset es irrelevante; lo importante es la clave que se desea eliminar.
4. Estructura de datos anidados: arreglos de objetos
MongoDB permite almacenar arreglos que a su vez contienen objetos, los cuales pueden contener otros arreglos. Analicemos la siguiente estructura de ejemplo insertada con _id:1:
{
_id: 1,
usuario: [
{
datos: [
{
suscripcion: [
{ precio: 3000, tipo: "basic" }
]
}
]
}
]
}
En este caso, usuario es un arreglo que contiene un objeto. Ese objeto posee la clave datos, que también es un arreglo, y dentro de él se encuentra suscripcion, otro arreglo que guarda objetos con información de la suscripción.
Comprender esta jerarquía es esencial para acceder y modificar valores específicos mediante rutas de acceso indexadas.
5. Modificar valores dentro de arreglos anidados
Supongamos que queremos cambiar el precio de la primera suscripción del primer usuario a 5000. Utilizamos la notación de índices para señalar la posición exacta:
db.personas.updateOne(
{ _id: 1 },
{ $set: { "usuario.0.datos.0.suscripcion.0.precio": 5000 } }
)
Los índices .0 indican el primer elemento del arreglo correspondiente. Con $set sobrescribimos el valor anterior sin afectar los demás campos.
6. Añadir nuevos atributos a subdocumentos
Para agregar el atributo tipo con valor "vip" dentro de la suscripción, la ruta correcta incluye también el índice del arreglo de suscripciones:
db.personas.updateOne(
{ _id: 1 },
{ $set: { "usuario.0.datos.0.suscripcion.0.tipo": "vip" } }
)
Si se omite el índice (.suscripcion.tipo) MongoDB interpretaría tipo como un campo del arreglo completo, lo que provocaría un error.
7. Eliminar atributos sin afectar otros campos
Cuando solo se desea remover un campo, como precio de la suscripción, el operador $unset es la mejor opción. A diferencia de $pull o $pop, que actúan sobre arreglos, $unset elimina directamente la clave especificada.
db.personas.updateOne(
{ _id: 1 },
{ $unset: { "usuario.0.datos.0.suscripcion.0.precio": "" } }
)
8. Manipular arreglos internos con $push
El operador $push inserta un nuevo elemento al final de un arreglo. Veamos un caso práctico: queremos agregar la cadena "ejemplo" al arreglo textos que se encuentra dentro del primer comentario del primer detalle.
db.coleccion.updateOne(
{ },
{ $push: { "detalle.0.comentarios.0.textos": "ejemplo" } }
)
El resultado es que "ejemplo" se agrega como último elemento del arreglo textos, manteniendo los valores previos intactos.
9. Buenas prácticas y consideraciones de rendimiento
- Usar índices adecuados: Cuando actualizas documentos basados en campos como
nombreo_id, asegúrate de que esos campos estén indexados para evitar escaneos completos de la colección. - Preferir
updateManycuando sea necesario: Si la operación afecta a varios documentos,updateManyreduce la cantidad de llamadas al servidor y mejora la consistencia. - Validar la existencia de campos antes de eliminarlos: Combinar
$existscon$unsetevita errores y mantiene la integridad de los datos. - Limitar la profundidad de los documentos: Aunque MongoDB permite anidar objetos y arreglos, estructuras demasiado profundas pueden complicar las consultas y afectar el rendimiento.
10. Resumen de los operadores clave
- $set: Asigna o sobrescribe el valor de un campo.
- $rename: Cambia el nombre de un campo manteniendo su valor.
- $unset: Elimina un campo del documento.
- $push: Añade un elemento al final de un arreglo.
- $pull: Elimina todos los elementos que coincidan con una condición dentro de un arreglo.
- $inc: Incrementa numéricamente el valor de un campo.
Dominar estas operaciones te permitirá gestionar colecciones de MongoDB de forma eficaz, garantizando que tus aplicaciones manejen los datos de manera consistente y optimizada.
