Actualización de datos del documento de MongoDB usando mongo shell
Este capítulo presenta la actualización de los datos del documento de MongoDB a través de la mongo shell. MongoDB soporta diferentes formas de actualización implementadas por varios tipos de operadores, y también admite múltiples funciones de actualización.
Preparar datos de prueba
Inserta un lote de datos de prueba en la colección de inventario.
db.inventory.insertMany( [
{ item: "lienzo", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" },
{ item: "diario", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "tapete", qty: 85, size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" },
{ item: "mousepad", qty: 25, size: { h: 19, w: 22.85, uom: "cm" }, status: "P" },
{ item: "libreta", qty: 50, size: { h: 8.5, w: 11, uom: "pulgadas" }, status: "P" },
{ item: "papel", qty: 100, size: { h: 8.5, w: 11, uom: "pulgadas" }, status: "D" },
{ item: "planificador", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "tarjeta postal", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
{ item: "cuaderno de dibujo", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "bloque de dibujo", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }
] );
Sintaxis del operador de actualización
Para actualizar documentos, MongoDB proporciona múltiples operadores de actualización (por ejemplo, $set) para modificar los valores de los campos.
El formato de los parámetros del operador de actualización es el siguiente:
{
<operador de actualización>: { <campo1>: <valor1>, ... },
<operador de actualización>: { <campo2>: <valor2>, ... },
...
}
Explicación:
- <operador de actualización>: Operador de actualización
-
: Nombre del campo -
: Parámetro del campo
Operador $set
Se utiliza para actualizar documentos y crear un nuevo campo si el campo no existe.
Actualizar un solo documento
Actualiza un documento utilizando el método db.collection.updateOne().
db.inventory.updateOne(
{ item: "papel" },
{
$set: { "size.uom": "cm", status: "P" },
$currentDate: { lastModified: true }
}
)
Explicación de la actualización:
- Primero, recupera el primer documento usando la condición de consulta (item = papel).
- Utiliza el operador $set para actualizar el valor del campo size.uom a cm y actualizar el valor del campo status a P.
- Utiliza el operador $currentDate para actualizar el valor del campo lastModified a la fecha actual. Si el campo lastModified no existe, $currentDate creará el campo.
Actualizar múltiples documentos
Utiliza el método db.collection.updateMany() para actualizar varios documentos que cumplan la condición.
db.inventory.updateMany(
{ "qty": { $lt: 50 } },
{
$set: { "size.uom": "pulgadas", status: "P" },
$currentDate: { lastModified: true }
}
)
Explicación de la actualización:
- Primero, recupera todos los documentos utilizando la condición de consulta (qty < 50).
- Utiliza el operador $set para actualizar el valor del campo size.uom a pulgadas y actualizar el valor del campo status a P.
- Utiliza el operador $currentDate para actualizar el valor del campo lastModified a la fecha actual. Si el campo lastModified no existe, $currentDate creará el campo.
Consejo: El operador $lt representa el significado de menor que.
Reemplazar Documento
Utiliza el método db.collection.replaceOne() para reemplazar el contenido de un documento (excepto el campo _id). El documento de reemplazo puede tener campos diferentes al documento original. Dado que el campo _id es inmutable, puede ser omitido. Sin embargo, si incluyes el campo _id, el valor del id debe ser consistente con el id del documento que está siendo actualizado.
db.inventory.replaceOne(
{ item: "papel" },
{ item: "papel", instock: [ { almacen: "A", cantidad: 60 }, { almacen: "B", cantidad: 40 } ] }
)
Explicación:
- Primero, utiliza el criterio de consulta (item=papel) para recuperar el primer documento.
- Reemplaza el documento coincidente con el contenido del segundo parámetro del método replaceOne.
Comportamiento de Actualización
Atomicidad
Todas las operaciones de escritura en MongoDB son atómicas a nivel de documento individual.
Campo _id
El campo _id es inmutable y no puede ser actualizado.