Usar operadores de actualización
En este paso, explorarás poderosos operadores de actualización de MongoDB que te permiten realizar modificaciones complejas de documentos más allá de simples cambios de valor.
Primero, creemos algunos datos de muestra con los que trabajar:
db.products.insertMany([
{
name: "Laptop",
price: 1000,
tags: ["electronics", "computer"],
stock: 50
},
{
name: "Smartphone",
price: 800,
tags: ["electronics", "mobile"],
stock: 30
}
])
MongoDB proporciona varios operadores de actualización poderosos que te permiten modificar documentos de manera sofisticada:
- Operador
$mul
- Multiplicar valores numéricos
db.products.updateOne(
{ name: "Laptop" },
{ $mul: { price: 1.1 } }
)
La salida:
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0,
upsertedId: null
}
El operador $mul
multiplica el valor de un campo por el número especificado. En este ejemplo, estamos aumentando el precio de la laptop en un 10%.
- Operador
$push
- Agregar elementos a un array
db.products.updateOne(
{ name: "Smartphone" },
{ $push: { tags: "sale" } }
)
La salida:
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0,
upsertedId: null
}
El operador $push
agrega un elemento a un campo de tipo array. Aquí, estamos agregando una etiqueta "sale" a las etiquetas del smartphone.
- Operadores
$min
y $max
- Actualizar basado en comparación
db.products.updateOne(
{ name: "Laptop" },
{
$min: { stock: 40 },
$max: { price: 1200 }
}
)
La salida:
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0,
upsertedId: null
}
$min
actualiza el campo si el valor especificado es menor que el valor existente.
$max
actualiza el campo si el valor especificado es mayor que el valor existente.
Verifiquemos nuestras actualizaciones:
db.products.find()
[
{
_id: ObjectId('674683aebec38876f7c1c18e'),
name: 'Laptop',
price: 1200,
tags: [ 'electronics', 'computer' ],
stock: 40
},
{
_id: ObjectId('674683aebec38876f7c1c18f'),
name: 'Smartphone',
price: 800,
tags: [ 'electronics', 'mobile', 'sale' ],
stock: 30
}
]
Deberías ver los documentos modificados con los precios, etiquetas y niveles de stock actualizados.