Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Transacciones y operaciones

MongoDB proporciona la capacidad de utilizar transacciones en múltiples operaciones, colecciones, bases de datos, documentos y particiones.

Las siguientes operaciones de lectura y escritura están permitidas en transacciones:

Método
Comando
Nota

db.collection.aggregate()

Excluyendo las siguientes etapas:

Excluyendo las siguientes expresiones de operador de consulta:

El método utiliza la etapa de agregación $match para la query y una etapa de agregación $group con una expresión $sum para realizar el recuento.

Disponible en colecciones sin fragmentar.

For sharded collections, use the aggregation pipeline with the $group stage. See Distinct Operation.

Si la operación de actualización o reemplazo se ejecuta con upsert: true en una colección no existente, la colección se crea implícitamente.

Para obtener más detalles, consulta Operaciones de administración.

Si se ejecuta en una colección no existente, la colección se crea implícitamente.

Para obtener más detalles, consulta Operaciones de administración.

Si se ejecuta en una colección no existente, la colección se crea implícitamente.

Para obtener más detalles, consulta Operaciones de administración.

Si se ejecuta en una colección no existente, la colección se crea implícitamente.

Para obtener más detalles, consulta Operaciones de administración.

Nota

Actualizaciones de valores de clave de partición

Puedes actualizar el valor de la clave de partición de un documento (a menos que el campo de la clave de partición sea el campo inmutable _id) emitiendo operaciones de actualización de un solo documento/findAndModify tanto en una transacción como en una escritura reintentable. Para más detalles, consulte Cambiar el valor de la clave de partición de un documento.

Para realizar una operación de conteo dentro de una transacción, utilice la etapa de agregación $count o la etapa de agregación $group (con una expresión $sum).

Los controladores de MongoDB proporcionan una API a nivel de colección countDocuments(filter, options) como un método asistente que utiliza el $group con una expresión $sum para realizar un conteo.

mongosh proporciona el método asistente db.collection.countDocuments() que utiliza $group con una expresión $sum para realizar un conteo.

Para realizar una operación específica dentro de una transacción:

  • Para colecciones no fragmentadas, puedes utilizar el método db.collection.distinct() o el comando distinct, así como la canalización de agregación con la etapa $group.

  • Para colecciones fragmentadas, no puede utilizar el método db.collection.distinct() ni el comando distinct.

    Para encontrar los valores distintos de una colección fragmentada, utilice la canalización de agregación con la etapa $group en su lugar. Por ejemplo:

    • En lugar de db.coll.distinct("x"), utilice

      db.coll.aggregate([
      { $group: { _id: null, distinctValues: { $addToSet: "$x" } } },
      { $project: { _id: 0 } }
      ])
    • En lugar de db.coll.distinct("x", { status: "A" }), utilice:

      db.coll.aggregate([
      { $match: { status: "A" } },
      { $group: { _id: null, distinctValues: { $addToSet: "$x" } } },
      { $project: { _id: 0 } }
      ])

    El pipeline devuelve un cursor a un documento:

    { "distinctValues" : [ 2, 3, 1 ] }

    Itere el cursor para acceder al documento de resultados.

Puede crear colecciones e índices en transacciones. Para obtener más información, consulte Crear colecciones e índices en una transacción. Las colecciones utilizadas en una transacción pueden estar en diferentes bases de datos.

Nota

No puedes crear nuevas colecciones en transacciones de escritura entre particiones. Por ejemplo, si guardas en una colección existente en una partición y creas implícitamente una colección en una partición diferente, MongoDB no puede realizar ambas operaciones en la misma transacción.

Puede crear colecciones e índices dentro de una transacción distribuida si la transacción es no es una transacción de escritura entre particiones.

Comando
Método
notas

El índice a crear debe estar en una colección inexistente, en cuyo caso la colección se crea como parte de la operación, o en una nueva colección vacía creada anteriormente en la misma transacción.

Nota

Para la creación explícita de una colección o un índice dentro de una transacción, el nivel de consistencia de lectura de la transacción debe ser "local".

Para más información sobre cómo crear colecciones e índices en una transacción, consulta Crear colecciones e índices en una transacción.

También se puede crear una colección de manera implícita mediante las siguientes operaciones de escritura en contra de una colección inexistente:

Método Ejecutar contra una colección inexistente
Comando ejecutado contra una colección inexistente

findAndModify con upsert: true

db.collection.updateOne() with upsert: true
db.collection.updateMany() with upsert: true
db.collection.replaceOne() with upsert: true

update con upsert: true

db.collection.bulkWrite() with insert or upsert:true operations
Various Bulk Operations with insert or upsert:true operations

Para otras operaciones CRUD permitidas en transacciones, consulta Operaciones CRUD.

Para más información sobre cómo crear colecciones e índices en una transacción, consulta Crear colecciones e índices en una transacción.

Los comandos informativos, como hello, buildInfo, connectionStatus (y sus métodos asistentes) están permitidos en las transacciones; sin embargo, no pueden ser la primera operación de la transacción.

Las siguientes operaciones no están permitidas en las transacciones:

  • Creación de nuevas colecciones en transacciones de escritura entre particiones. Por ejemplo, si usted guarda en una colección existente en una partición y crea implícitamente una colección en una partición diferente, MongoDB no puede realizar ambas operaciones en la misma transacción.

  • Creación explícita de colecciones, pordb.createCollection() ejemplo, el método, e índices, pordb.collection.createIndexes() ejemplo, los métodos y, cuando se db.collection.createIndex() "local" utiliza un nivel de preocupación de lectura distinto de.

  • Los comandos listCollections y listIndexes y sus métodos asistentes.

  • Otras operaciones que no son CRUD ni informativas, como createUser, getParameter, count y sus asistentes.

  • Escribe en colecciones limitadas.

  • Uso de la preocupación de "snapshot" lectura al leer de una colección limitada. (A partir de MongoDB) 5.0

  • Lee/escribe en colecciones en las bases de datos config, admin o local.

  • Escribe en system.* colecciones.

  • Utilizando explain u órdenes similares para devolver el plan del query de la operación admitida.

  • Llamar a getMore en cursores creados fuera de una transacción o llamar a getMore fuera de una transacción en cursores creados dentro de una transacción.

  • Especificar el comando killCursors como la primera operación en una transacción.

    Nota

    Si ejecuta el comando killCursors dentro de una transacción, el servidor detiene inmediatamente los cursores especificados. No espera a que la transacción se confirme.

Tip

Volver

API de drivers

En esta página