Docs Menu
Docs Home
/ /

Operaciones compuestas

En esta guía, puedes aprender a usar el controlador de Rust para realizar operaciones compuestas.

Las operaciones compuestas combinan la funcionalidad de las operaciones de lectura y escritura en una sola. Acción atómica. Si realiza una operación de lectura y una de escritura consecutivamente, alguien podría modificar el documento de destino entre ambas, lo que generaría resultados inesperados. Al realizar una operación compuesta, MongoDB impide cambios intermedios en los datos mediante un bloqueo de escritura en el documento que está modificando hasta que se complete la operación.

Puede realizar las siguientes operaciones compuestas con el controlador:

  • Buscar y eliminar un documento

  • Buscar y actualizar un documento

  • Buscar y reemplazar un documento

Esta guía incluye las siguientes secciones:

  • Datos de muestra para ejemplos presenta los datos de muestra que se utilizan en los ejemplos de operaciones compuestas

  • Buscar y eliminar un documento describe cómo buscar y eliminar un documento en una sola operación

  • Buscar y actualizar un documento describe cómo buscar y actualizar un documento en una sola operación

  • Buscar y reemplazar un documento describe cómo buscar y reemplazar un documento en una sola operación

  • Información adicional proporciona enlaces a recursos y documentación de API para los tipos y métodos mencionados en esta guía.

Tip

Para aprender a realizar operaciones de lectura y escritura atómicas en más de un documento a la vez, consulte la Guía de transacciones.

Los ejemplos de esta guía utilizan los siguientes documentos de muestra. Cada documento representa a un estudiante y contiene información sobre su edad y la escuela a la que asiste:

{ "name": "Alex Johnson", "age": 8, "school": "Lakeside Elementary" },
{ "name": "Samara Khan", "age": 11, "school": "Rolling Hills Middle School" },
{ "name": "Ben Joseph", "age": 16, "school": "Aurora High School" },
{ "name": "Deanna Porowski", "age": 10, "school": "Lakeside Elementary" }

El find_one_and_delete() El método busca y elimina el primer documento que coincide con el filtro de consulta especificado. Si un documento cumple los criterios de filtro, el método devuelve un tipo Some. Si ningún documento coincide, devuelve un tipo None.

Nota

Si desea realizar otras operaciones entre buscar y eliminar un documento, puede llamar al método find_one() seguido del método delete_one().

Opcionalmente, puede modificar el comportamiento del método find_one_and_delete() encadenando los métodos del generador de opciones a find_one_and_delete(). Estos métodos del generador establecen FindOneAndDeleteOptions campos de estructura.

La siguiente tabla describe las opciones disponibles en FindOneAndDeleteOptions:

Opción
Descripción

max_time

The maximum amount of time in milliseconds that the query can run.

Type: Duration

projection

The projection to use when returning results.

Type: Document
Default: None

sort

The sorting order to use when returning results. By default, the driver returns documents in their natural order, or as they appear in the database. To learn more, see natural order in the Server manual glossary.

Type: Document
Default: None

write_concern

The write concern for the operation. If you don't set this option, the operation inherits the write concern set for the collection. To learn more about write concerns, see Write Concern in the Server manual.

Type: WriteConcern

collation

The collation to use when sorting results. To learn more about collations, see the Collations guide.

Type: Collation
Default: None

hint

The index to use for the operation. To learn more about indexes, see Indexes in the Server manual. This option is available only when connecting to MongoDB Server versions 4.4 and later.

Type: Hint
Default: None

let_vars

A map of parameters and values. You can access these parameters as variables in aggregation expressions. This option is available only when connecting to MongoDB Server versions 5.0 and later.

Type: Document

comment

An arbitrary Bson value tied to the operation to trace it through the database profiler, currentOp, and logs. This option is available only when connecting to MongoDB Server versions 4.4 and later.

Type: Bson
Default: None

Nota

Opciones de configuración

Puede configurar los campos FindOneAndDeleteOptions encadenando los métodos del generador de opciones directamente a la llamada al método find_one_and_delete(). Si utiliza una versión anterior del controlador, debe construir una instancia FindOneAndDeleteOptions encadenando los métodos del generador de opciones al método builder(). A continuación, pase la instancia de opciones como parámetro a find_one_and_delete().

El siguiente código muestra cómo establecer el campo comment encadenando el método comment() al método find_one_and_delete():

let res = my_coll.find_one_and_delete(filter)
.comment(bson!("hello"))
.await?;

El siguiente ejemplo utiliza el método find_one_and_delete() para hacer coincidir y eliminar el primer documento donde el valor del campo age sea menor o igual a 10:

let filter = doc! { "age": doc! { "$lte": 10 } };
let res = my_coll.find_one_and_delete(filter).await?;
println!("Deleted document:\n{:?}", res);
Deleted document:
Some(Document({"_id": ObjectId("..."),
"name": String("Deanna Porowski"), "age": Int32(10), "school":
String("Lakeside Elementary")}))

El método find_one_and_update() busca y actualiza el primer documento que coincide con el filtro de consulta especificado. La operación actualiza el documento según las especificaciones proporcionadas en un documento de actualización. Si un documento cumple con los criterios del filtro, el método devuelve un tipo Some. Si ningún documento coincide, devuelve un tipo None.

Nota

Si desea realizar otras operaciones entre buscar y actualizar un documento, puede llamar al método find_one() seguido del método update_one().

Opcionalmente, puede modificar el comportamiento del método find_one_and_update() encadenando los métodos del generador de opciones a find_one_and_update(). Estos métodos del generador establecen FindOneAndUpdateOptions campos de estructura.

La siguiente tabla describe las opciones disponibles en FindOneAndUpdateOptions:

Opción
Descripción

array_filters

The set of filters specifying the array elements to which the update applies.

Type: Vec<Document>

bypass_document_validation

If true, allows the driver to perform a write that violates document-level validation. To learn more about validation, see Schema Validation in the Server manual.

Type: bool
Default: false

max_time

The maximum amount of time in milliseconds that the query can run.

Type: Duration

projection

The projection to use when returning results.

Type: Document
Default: None

return_document

If Before, the operation returns the document before the update. If After, the operation returns the updated document.

Type: ReturnDocument
Default: ReturnDocument::Before

sort

The sorting order to use when returning results. By default, the driver returns documents in their natural order, or as they appear in the database. To learn more, see natural order in the Server manual glossary.

Type: Document
Default: None

upsert

If true, the operation inserts a document if no documents match the query filter.

Type: bool
Default: false

write_concern

The write concern for the operation. If you don't set this option, the operation inherits the write concern set for the collection. To learn more about write concerns, see Write Concern in the Server manual.

Type: WriteConcern

collation

The collation to use when sorting results. To learn more about collations, see the Collations guide.

Type: Collation
Default: None

hint

The index to use for the operation. To learn more about indexes, see Indexes in the Server manual. This option is available only when connecting to MongoDB Server versions 4.4 and later.

Type: Hint
Default: None

let_vars

A map of parameters and values. You can access these parameters as variables in aggregation expressions. This option is available only when connecting to MongoDB Server versions 5.0 and later.

Type: Document

comment

An arbitrary Bson value tied to the operation to trace it through the database profiler, currentOp, and logs. This option is available only when connecting to MongoDB Server versions 4.4 and later.

Type: Bson
Default: None

El siguiente código muestra cómo establecer el campo comment encadenando el método comment() al método find_one_and_update():

let res = my_coll.find_one_and_update(filter, update)
.comment(bson!("hello"))
.await?;

Este ejemplo muestra cómo realizar las siguientes acciones:

  • Llamar al método find_one_and_update()

  • Pase un filtro de consulta a find_one_and_update() que coincida con un documento donde el valor de school sea "Aurora High School"

  • Pase un documento de actualización a find_one_and_update() que establezca el campo school en "Durango High School" e incremente el campo age en 1

  • Encadene el return_document() método a para find_one_and_update() devolver el documento coincidente después de la actualización

let filter = doc! { "school": "Aurora High School" };
let update =
doc! { "$set": doc! { "school": "Durango High School" },
"$inc": doc! { "age": 1 } };
let res = my_coll.find_one_and_update(filter, update)
.return_document(ReturnDocument::After)
.await?;
println!("Updated document:\n{:?}", res);
Updated document:
Some(Document({"_id": ObjectId("..."),
"name": String("Ben Joseph"), "age": Int32(17), "school":
String("Durango High School")}))

El método find_one_and_replace() busca y reemplaza el primer documento que coincida con el filtro de consulta especificado. La operación reemplaza todos los campos del documento, excepto el campo _id, con los campos y valores que proporcione. Si un documento cumple los criterios del filtro, el método devuelve un tipo Some. Si ningún documento coincide, devuelve un tipo None.

Nota

Si desea realizar otras operaciones entre buscar y reemplazar un documento, puede llamar al método find_one() seguido del método replace_one().

Opcionalmente, puede modificar el comportamiento del método find_one_and_replace() encadenando los métodos del generador de opciones a find_one_and_replace(). Estos métodos del generador establecen FindOneAndReplaceOptions campos de estructura.

La siguiente tabla describe las opciones disponibles en FindOneAndReplaceOptions:

Opción
Descripción

bypass_document_validation

If true, allows the driver to perform a write that violates document-level validation. To learn more about validation, see Schema Validation in the Server manual.

Type: bool
Default: false

max_time

The maximum amount of time in milliseconds that the query can run.

Type: Duration

projection

The projection to use when returning results.

Type: Document
Default: None

return_document

If Before, the operation returns the document before the update. If After, the operation returns the updated document.

Type: ReturnDocument
Default: ReturnDocument::Before

sort

The sorting order to use when returning results. By default, the driver returns documents in their natural order, or as they appear in the database. To learn more, see natural order in the Server manual glossary.

Type: Document
Default: None

upsert

If true, the operation inserts a document if no documents match the query filter.

Type: bool
Default: false

write_concern

The write concern for the operation. If you don't set this option, the operation inherits the write concern set for the collection. To learn more about write concerns, see Write Concern in the Server manual.

Type: WriteConcern

collation

The collation to use when sorting results. To learn more about collations, see the Collations guide.

Type: Collation
Default: None

hint

The index to use for the operation. To learn more about indexes, see Indexes in the Server manual. This option is available only when connecting to MongoDB Server versions 4.4 and later.

Type: Hint
Default: None

let_vars

A map of parameters and values. You can access these parameters as variables in aggregation expressions. This option is available only when connecting to MongoDB Server versions 5.0 and later.

Type: Document

comment

An arbitrary Bson value tied to the operation to trace it through the database profiler, currentOp, and logs. This option is available only when connecting to MongoDB Server versions 4.4 and later.

Type: Bson
Default: None

El siguiente código muestra cómo establecer el campo comment encadenando el método comment() al método find_one_and_replace():

let res = my_coll.find_one_and_replace(filter, replacement)
.comment(bson!("hello"))
.await?;

Este ejemplo realiza las siguientes acciones:

  • Llama al método find_one_and_replace()

  • Pasa un filtro de consulta a find_one_and_replace() que coincide con un documento donde el valor de name incluye la cadena "Johnson"

  • Pasa un documento de reemplazo a find_one_and_replace() que describe a un nuevo estudiante

  • Encadena el método return_document() a find_one_and_replace() para devolver el documento después del reemplazo

  • Encadena el método projection() a los campos find_one_and_replace()``to project only the ``name y school en la salida

let filter = doc! { "name": doc! { "$regex": "Johnson" } };
let replacement =
doc! { "name": "Toby Fletcher",
"age": 14,
"school": "Durango High School" };
let res = my_coll.find_one_and_replace(filter, replacement)
.return_document(ReturnDocument::After)
.projection(doc! { "name": 1, "school": 1, "_id": 0 })
.await?;
println!("Document after replacement:\n{:?}", res);
Document after replacement:
Some(Document({"name": String("Toby Fletcher"), "school":
String("Durango High School")}))

Para obtener más información sobre las operaciones de esta guía, consulte la siguiente documentación:

Para obtener más información sobre los métodos y tipos mencionados en esta guía, consulte la siguiente documentación de API:

Volver

Operaciones masivas