Docs Menu
Docs Home
/ /
Contextos de aplicación específicos

Datos de modelo para operaciones atómicas

Aunque MongoDB admite Transacciones de múltiples documentos para conjuntos de réplicas y clústeres fragmentados: para muchos escenarios, el modelo de datos desnormalizados, como se analiza en esta página, seguirá siendo óptimo para sus datos y casos de uso.

En MongoDB, una operación de escritura en un solo documento es atómica. Para los campos que deben actualizarse conjuntamente, incrustarlos en el mismo documento garantiza que se actualicen automáticamente.

Por ejemplo, considere una situación en la que necesita mantener información sobre libros, incluido el número de copias disponibles para préstamo, así como la información de préstamo actual.

Las copias disponibles del libro y la información de préstamo deben estar sincronizadas. Por lo tanto, al incrustar... available El campo y el campo checkout dentro del mismo documento garantizan que pueda actualizar los dos campos de forma atómica.

{
_id: 123456789,
title: "MongoDB: The Definitive Guide",
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
publisher_id: "oreilly",
available: 3,
checkout: [ { by: "joe", date: ISODate("2012-10-15") } ]
}

Luego, para actualizar con nueva información de pago, puede usar el db.collection.updateOne() método para actualizar de forma atómica tanto el available campo como el checkout campo:

db.books.updateOne (
{ _id: 123456789, available: { $gt: 0 } },
{
$inc: { available: -1 },
$push: { checkout: { by: "abc", date: new Date() } }
}
)

La operación devuelve un documento que contiene información sobre el estado de la operación:

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

El campo matchedCount muestra que el documento 1 coincidió con la condición de actualización y modifiedCount muestra que la operación actualizó el documento 1.

Si ningún documento coincide con la condición de actualización, entonces matchedCount y modifiedCount serían 0 e indicarían que no se pudo retirar el libro.

Volver

Contextos de aplicación específicos

En esta página