Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

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 guardar en una acción atómica. Si realizas una operación de lectura y una operación de guardar en secuencia, alguien podría cambiar tu documento objetivo entre esas operaciones, lo que podría conducir a resultados inesperados. Cuando realizas una operación compuesta, MongoDB previene los cambios temporales de datos colocando un bloqueo de escritura en el documento que estás modificando hasta que la operación se complete.

Puede realizar las siguientes operaciones compuestas con el controlador:

  • Encuentra y elimina un documento

  • Buscar y actualizar un documento

  • Buscar y reemplazar un documento

Esta guía incluye las siguientes secciones:

Tip

Para aprender cómo realizar operaciones de lectura y escritura atómicas en más de un documento al mismo tiempo, consulta 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 asisten:

{ "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 método find_one_and_delete() encuentra y borra el primer documento que cumple con el filtro de query especificado. Si un documento cumple con los criterios de filtro, el método devuelve un tipo Some. Si no hay documentos coincidentes, devuelve un tipo None.

Nota

Si deseas realizar otras operaciones entre la búsqueda y la eliminación de un documento, puedes llamar al método find_one() seguido del método delete_one().

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

La siguiente tabla describe las opciones disponibles en FindOneAndDeleteOptions:

Opción
Descripción

max_time

El tiempo máximo en milisegundos que la query puede ejecutarse.

Tipo: Duration

projection

La proyección que se utilizará al devolver los resultados.

Tipo: Document
Predeterminado: None

sort

El orden de clasificación que se utilizará al devolver los resultados. Por defecto, el controlador devuelve los documentos en su orden natural, es decir, tal como aparecen en la base de datos. Para obtener más información, consulte el glosario del manual del servidor sobre el orden natural.

Tipo: Document
Predeterminado: None

write_concern

La preocupación de escritura para la operación. Si no se configura esta opción, la operación hereda la preocupación de escritura establecida para la colección. Para obtener más información sobre las preocupaciones de escritura, consulte "Preocupación de escritura" en el manual del servidor.

Tipo: WriteConcern

collation

La intercalación que se utilizará al ordenar los resultados. Para obtener más información sobre las intercalaciones, consulte la guía de intercalaciones.

Tipo: Collation
Predeterminado: None

hint

El índice que se utilizará para la operación. Para obtener más información sobre los índices, consulte la sección Índices en el manual del servidor. Esta opción solo está disponible al conectarse a las versiones 4.4 y posteriores del servidor MongoDB.

Tipo: Hint
Predeterminado: None

let_vars

Un mapa de parámetros y valores. Puede acceder a estos parámetros como variables en expresiones de agregación. Esta opción solo está disponible cuando se conecta a las versiones 5.0 y posteriores de MongoDB Server.

Tipo: Document

comment

Un Bson valor arbitrario vinculado a la operación para rastrearla a través del generador de perfiles de la base de datos, currentOp y los registros. Esta opción solo está disponible al conectarse a las versiones 4.4 y posteriores del servidor MongoDB.

Tipo: Bson
Predeterminado: None

Nota

Opciones de configuración

Puedes configurar los campos de FindOneAndDeleteOptions encadenando métodos del generador de opciones directamente a la llamada del método find_one_and_delete(). Si está utilizando una versión anterior del controlador, debe construir una instancia de FindOneAndDeleteOptions encadenando métodos del generador de opciones al método builder(). Luego, pasa tu instancia de opciones como un parámetro a find_one_and_delete().

El siguiente código muestra cómo establecer el campo comment mediante el encadenamiento del 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 buscar y borrar el primer documento donde el valor del campo age es 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() encuentra y actualiza el primer documento que coincida con el filtro de query especificado. La operación actualiza el documento según las especificaciones que se brindan en un documento de actualización. Si un documento coincide 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 encontrar y actualizar un documento, puede llamar al método find_one() seguido del método update_one().

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

La siguiente tabla describe las opciones disponibles en FindOneAndUpdateOptions:

Opción
Descripción

array_filters

Conjunto de filtros que especifican los elementos de la matriz a los que se aplica la actualización. Para obtener más información, consulte la guía Actualizar matrices en un documento.

Tipo: Vec<Document>

bypass_document_validation

Si true, permite que el driver realice una operación de guardar que infrinja la validación a nivel de documento. Para obtener más información sobre la validación, consulte Validación de esquemas en el manual del servidor.

Tipo: bool
Por defecto: false

max_time

El tiempo máximo en milisegundos que la query puede ejecutarse.

Tipo: Duration

projection

La proyección que se utilizará al devolver los resultados.

Tipo: Document
Predeterminado: None

return_document

Si Before es, la operación devuelve el documento antes de la actualización. Si After es, la operación devuelve el documento actualizado.

Tipo: ReturnDocument
Predeterminado: ReturnDocument::Before

sort

El orden de clasificación que se utilizará al devolver los resultados. Por defecto, el controlador devuelve los documentos en su orden natural, es decir, tal como aparecen en la base de datos. Para obtener más información, consulte el glosario del manual del servidor sobre el orden natural.

Tipo: Document
Predeterminado: None

upsert

Si es verdadero, la operación inserta un documento si ningún documento coincide con el filtro de query.

Tipo: bool
Por defecto: false

write_concern

La preocupación de escritura para la operación. Si no se configura esta opción, la operación hereda la preocupación de escritura establecida para la colección. Para obtener más información sobre las preocupaciones de escritura, consulte "Preocupación de escritura" en el manual del servidor.

Tipo: WriteConcern

collation

La intercalación que se utilizará al ordenar los resultados. Para obtener más información sobre las intercalaciones, consulte la guía de intercalaciones.

Tipo: Collation
Predeterminado: None

hint

El índice que se utilizará para la operación. Para obtener más información sobre los índices, consulte la sección Índices en el manual del servidor. Esta opción solo está disponible al conectarse a las versiones 4.4 y posteriores del servidor MongoDB.

Tipo: Hint
Predeterminado: None

let_vars

Un mapa de parámetros y valores. Puede acceder a estos parámetros como variables en expresiones de agregación. Esta opción solo está disponible cuando se conecta a las versiones 5.0 y posteriores de MongoDB Server.

Tipo: Document

comment

Un Bson valor arbitrario vinculado a la operación para rastrearla a través del generador de perfiles de la base de datos, currentOp y los registros. Esta opción solo está disponible al conectarse a las versiones 4.4 y posteriores del servidor MongoDB.

Tipo: Bson
Predeterminado: None

El siguiente código muestra cómo establecer el campo comment mediante el encadenamiento del 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:

  • Llama al método find_one_and_update()

  • Pasa un filtro de query 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

  • Encadena el método return_document() a find_one_and_update() para 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() encuentra y reemplaza el primer documento que coincide con el filtro de query especificado. La operación reemplaza todos los campos del documento excepto el campo _id con los campos y valores que usted proporcione. Si un documento coincide con los criterios del filtro, el método devuelve un tipo Some. Si ningún documento coincide, devuelve un tipo None.

Nota

Si deseas realizar otras operaciones entre encontrar y reemplazar un documento, puedes llamar al método find_one() seguido del método replace_one().

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

La siguiente tabla describe las opciones disponibles en FindOneAndReplaceOptions:

Opción
Descripción

bypass_document_validation

Si true, permite que el driver realice una operación de guardar que infrinja la validación a nivel de documento. Para obtener más información sobre la validación, consulte Validación de esquemas en el manual del servidor.

Tipo: bool
Por defecto: false

max_time

El tiempo máximo en milisegundos que la query puede ejecutarse.

Tipo: Duration

projection

La proyección que se utilizará al devolver los resultados.

Tipo: Document
Predeterminado: None

return_document

Si Before es, la operación devuelve el documento antes de la actualización. Si After es, la operación devuelve el documento actualizado.

Tipo: ReturnDocument
Predeterminado: ReturnDocument::Before

sort

El orden de clasificación que se utilizará al devolver los resultados. Por defecto, el controlador devuelve los documentos en su orden natural, es decir, tal como aparecen en la base de datos. Para obtener más información, consulte el glosario del manual del servidor sobre el orden natural.

Tipo: Document
Predeterminado: None

upsert

Si es verdadero, la operación inserta un documento si ningún documento coincide con el filtro de query.

Tipo: bool
Por defecto: false

write_concern

La preocupación de escritura para la operación. Si no se configura esta opción, la operación hereda la preocupación de escritura establecida para la colección. Para obtener más información sobre las preocupaciones de escritura, consulte "Preocupación de escritura" en el manual del servidor.

Tipo: WriteConcern

collation

La intercalación que se utilizará al ordenar los resultados. Para obtener más información sobre las intercalaciones, consulte la guía de intercalaciones.

Tipo: Collation
Predeterminado: None

hint

El índice que se utilizará para la operación. Para obtener más información sobre los índices, consulte la sección Índices en el manual del servidor. Esta opción solo está disponible al conectarse a las versiones 4.4 y posteriores del servidor MongoDB.

Tipo: Hint
Predeterminado: None

let_vars

Un mapa de parámetros y valores. Puede acceder a estos parámetros como variables en expresiones de agregación. Esta opción solo está disponible cuando se conecta a las versiones 5.0 y posteriores de MongoDB Server.

Tipo: Document

comment

Un Bson valor arbitrario vinculado a la operación para rastrearla a través del generador de perfiles de la base de datos, currentOp y los registros. Esta opción solo está disponible al conectarse a las versiones 4.4 y posteriores del servidor MongoDB.

Tipo: Bson
Predeterminado: None

El siguiente código muestra cómo establecer el campo comment mediante el encadenamiento del 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 query 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 de la sustitución.

  • 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 en 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, vea la siguiente documentación de la API: