Actualizar significa transformar un documento existente bajo una condición. En MongoDB, el filtro no solo localiza el documento: también puede expresar . Los operadores de update permiten modificar campos de forma atómica sin leer, reconstruir y reemplazar todo el documento.
Cada documento se actualiza atómicamente, pero el conjunto completo no es una sola operación atómica. Otros procesos pueden observar un estado parcialmente actualizado mientras avanza.
Es apropiado cuando la semántica realmente es reemplazar toda la representación. Es peligroso si el objeto proviene de una lectura antigua o no incluye campos añadidos por otro proceso.
matchedCount = 0
→ no existe, no pertenece al tenant o no cumple precondition
matchedCount = 1, modifiedCount = 0
→ el documento coincidió, pero el valor final ya era igual o la operación no cambió datos
matchedCount = 1, modifiedCount = 1
→ cambio aplicado
No interpretes automáticamente matchedCount = 0 como “recurso inexistente”. Puede representar un conflicto de estado.
Asigna fecha o timestamp del servidor según opciones. Puede ser útil para timestamps técnicos, aunque el dominio debe definir qué reloj representa el evento.
La pipeline puede calcular el nuevo valor desde el documento actual. Es poderosa, pero debe mantenerse legible y probarse con tipos missing o incorrectos.
Sin embargo, un array ilimitado de operation IDs no escala. Puede utilizarse una colección idempotency separada con índice unique y transacción cuando la garantía lo requiera.
El filtro de un update es parte de la lógica, no solo una dirección. Los operadores atómicos protegen cambios locales y las precondiciones evitan carreras. updateMany no vuelve atómico un conjunto y replaceOne debe utilizarse únicamente cuando realmente deseas sustituir toda la representación.
Comprueba lo aprendido
¿Qué diferencia existe entre updateOne y replaceOne?
¿Cómo funciona el filtro como precondition?
¿Qué indican matchedCount y modifiedCount?
¿Cómo evita version un lost update?
¿Por qué $inc puede no ser idempotente?
¿Qué riesgos tiene updateMany en una migración grande?