Overview
En esta guía, puede aprender cómo modificar documentos en MongoDB mediante operaciones de actualización y reemplazo.
Las operaciones de actualizar modifican los campos que especifiques mientras mantienen sin cambios otros campos y valores. Las operaciones de reemplazo eliminan todos los campos existentes de un documento, excepto el _id campo y sustituir los campos eliminados por nuevos campos y valores.
Esta guía incluye las siguientes secciones:
Actualizar documentos describe cómo usar el controlador para ejecutar operaciones de actualización.
Reemplazar un documento describe cómo usar el controlador para ejecutar operaciones de reemplazo
Modificar el comportamiento deactualización y reemplazo describe cómo modificar el comportamiento predeterminado de los métodos descritos en esta guía
Información adicional proporciona enlaces a recursos y documentación de la API para los tipos y métodos mencionados en esta guía
Actualizar patrón de documento
En MongoDB, todos los métodos para cambiar documentos siguen el mismo patrón:

Nota
changeX() es un marcador de posición y no un método real.
Estos métodos toman los siguientes parámetros:
Un filtro de query para hacer coincidir uno o más documentos para cambiar
Un documento de actualización que especifica los cambios de campo y valor
El controlador Rust proporciona los siguientes métodos para modificar documentos:
update_one()update_many()replace_one()
Puede recuperar y modificar datos en una sola acción utilizando operaciones compuestas. Para obtener más información, consulta la guía sobre Operaciones compuestas.
El campo _id
Cada documento de una colección de MongoDB tiene un campo _id único e inmutable. Si intenta modificar el campo _id mediante una operación de actualización o reemplazo, el controlador genera un WriteError y no realiza ninguna actualización.
Update Documents
Puede realizar operaciones de actualización con los siguientes métodos:
update_one(), que actualiza el primer documento que coincide con los criterios de búsquedaupdate_many(), que actualiza todos los documentos que coinciden con los criterios de búsqueda
También puede encadenar métodos del generador de opciones a estos métodos de operación de actualización. Para obtener información sobre cómo modificar el comportamiento de los métodos de actualización, consulte la sección "Modificar el comportamiento de actualización y reemplazo" de esta guía.
Parámetros
Cada método toma un filtro de query y un documento de actualización que incluye al menos un operador de actualización. El operador de actualización especifica el tipo de actualización que se debe realizar e incluye los campos y valores que describen el cambio. Actualiza los documentos utilizando el siguiente formato:
doc! { "<update operator>": doc! { "<field>": <value> } }
Para especificar varias actualizaciones en un solo documento de actualización, utiliza el siguiente formato:
doc! { "<update operator>": doc!{"<field>": <value>}, "<update operator>": doc!{"<field>": <value>}, ... }
Consulte el manual del servidor de MongoDB para obtener una lista completa de los operadores de actualización y sus descripciones.
Nota
Pipelines de agregación en operaciones de actualización
Puede usar pipelines de agregación para realizar operaciones de actualización. Para obtener más información sobre las etapas de agregación que MongoDB admite en pipelines de agregación, consulte nuestro tutorial sobre cómo realizar actualizaciones con pipelines de agregación.
Valor de retorno
Los métodos update_one() y update_many() devuelven un tipo UpdateResult si la operación es exitosa. El tipo UpdateResult contiene las siguientes propiedades que describen la operación:
Propiedad | Descripción |
|---|---|
| El número de documentos coincidentes con el filtro |
| El número de documentos modificados por la operación |
| El |
Si varios documentos coinciden con el filtro de query que se pasa a UpdateOne(), el método selecciona y actualiza el primer documento que coincida. Si ningún documento corresponde al filtro de query, la operación de actualización no realiza ningún cambio.
Actualizar ejemplo
Los siguientes documentos describen a los empleados de una empresa:
{ "_id": ObjectId('4337'), "name": "Shelley Olson", "department": "Marketing", "role": "Director", "bonus": 3000 }, { "_id": ObjectId('4902'), "name": "Remi Ibrahim", "department": "Marketing", "role": "Consultant", "bonus": 1800 }
Este ejemplo realiza una operación de actualización con el método update_many(). El método update_many() toma los siguientes parámetros:
Un filtro de query para hacer coincidir documentos donde el valor del campo
departmentsea"Marketing"Un documento de actualización que contiene las siguientes actualizaciones:
Un operador
$setpara cambiar el valor dedepartmenta"Business Operations"y derolea"Analytics Specialist"Un operador
$incpara aumentar el valor debonusen500
let update_doc = doc! { "$set": doc! { "department": "Business Operations", "role": "Analytics Specialist" }, "$inc": doc! { "bonus": 500 } }; let res = my_coll .update_many(doc! { "department": "Marketing" }, update_doc) .await?; println!("Modified documents: {}", res.modified_count);
Modified documents: 2
Los siguientes documentos reflejan los cambios resultantes de la operación de actualización anterior:
{ "_id": ObjectId('4337'), "name": "Shelley Olson", "department": "Business Operations", "role": "Analytics Specialist", "bonus": 3500 }, { "_id": ObjectId('4902'), "name": "Remi Ibrahim", "department": "Business Operations", "role": "Analytics Specialist", "bonus": 2300 }
actualizar por ObjectId ejemplo
El siguiente documento describe a un empleado de una empresa:
{ "_id": ObjectId('4274'), "name": "Jill Millerton", "department": "Marketing", "role": "Consultant" }
Este ejemplo consulta el documento precedente mediante la especificación de un filtro de query para coincidir con el valor único _id del documento. Luego, el código realiza una operación de actualización con el método update_one(). El método update_one() toma los siguientes parámetros:
Filtro de query que coincide con un documento en el que el valor del campo
_idesObjectId('4274')Actualizar el documento que crea instrucciones para establecer el valor de
namea"Jill Gillison"
let id = ObjectId::from_str("4274").expect("Could not convert to ObjectId"); let filter_doc = doc! { "_id": id }; let update_doc = doc! { "$set": doc! { "name": "Jill Gillison" } }; let res = my_coll .update_one(filter_doc, update_doc) .await?; println!("Modified documents: {}", res.modified_count);
Modified documents: 1
El siguiente documento refleja los cambios resultantes de la operación de actualización anterior:
{ "_id": ObjectId('4274'), "name": "Jill Gillison", "department": "Marketing", "role": "Consultant" }
Tip
Para obtener más información sobre el campo _id, consulte la sección _id Field de esta página o la documentación del método ObjectId() del manual del Servidor.
Reemplazar un documento
Puede realizar una operación de reemplazo con el método replace_one(). Este método reemplaza todos los campos existentes de un documento, excepto el campo _id, con los nuevos campos y valores que especifique.
También puede encadenar métodos del generador de opciones a un método de operación de reemplazo. Para obtener información sobre cómo modificar el comportamiento del replace_one() método, consulte la sección "Modificar el comportamiento de actualización y reemplazo" de esta guía.
Parámetros
El método replace_one() toma un filtro de query y un documento de reemplazo, que contiene los campos y valores que reemplazarán un documento existente. Los documentos de reemplazo utilizan el siguiente formato:
doc! { "<field>": <value>, "<field>": <value>, ... }
Return Values
El método replace_one devuelve un tipo UpdateResult si la operación se realiza correctamente. El tipo UpdateResult contiene las siguientes propiedades que describen la operación:
Propiedad | Descripción |
|---|---|
| El número de documentos coincidentes con el filtro |
| El número de documentos modificados por la operación |
| El |
Si varios documentos coinciden con el filtro de query que pasas a replace_one(), el método selecciona y reemplaza el primer documento que coincida. Si ningún documento coincide con el filtro de query, la operación de reemplazo no realiza ningún cambio.
Ejemplo de reemplazo
El siguiente documento describe a un empleado de una empresa:
{ "_id": ObjectId('4501'), "name": "Matt DeGuy", "role": "Consultant", "team_members": [ "Jill Gillison", "Susan Lee" ] }
Este ejemplo utiliza el método replace_one() para reemplazar el documento anterior con uno que tenga los siguientes campos:
Un valor
namede"Susan Lee"Un valor
rolede"Lead Consultant"Un valor
team_membersde[ "Jill Gillison" ]
let replace_doc = doc! { "name": "Susan Lee", "role": "Lead Consultant", "team_members": vec! [ "Jill Gillison" ] }; let res = my_coll .replace_one(doc! { "name": "Matt DeGuy" }, replace_doc) .await?; println!( "Matched documents: {}\nModified documents: {}", res.matched_count, res.modified_count );
Matched documents: 1 Modified documents: 1
El documento reemplazado contiene el contenido del documento de reemplazo y el campo inmutable _id:
{ "_id": ObjectId('4501'), "name": "Susan Lee", "role": "Lead Consultant", "team_members": [ "Jill Gillison" ] }
Modificar el Comportamiento de actualizar y Sustitución
Puedes modificar el comportamiento de los métodos update_one(), update_many y replace_one() llamando a los métodos de opciones que establecen los campos de estructura UpdateOptions.
Nota
Opciones de configuración
Puedes configurar los UpdateOptions campos encadenando opciones de método de construcción directamente a la llamar de actualizar o sustitucción del método. Si está utilizando una versión anterior del controlador, debe construir una instancia de UpdateOptions encadenando los métodos del generador de opciones al método builder(). Luego, pasa tu instancia de opciones como parámetro a update_one(), update_many o replace_one().
La siguiente tabla describe las opciones disponibles en UpdateOptions:
Opción | Descripción |
|---|---|
| The set of filters specifying the array elements to which the
update applies. Type: Vec<Document> |
| If true, allows the driver to perform a write that violates
document-level validation. To learn more about validation, see
the guide on Schema Validation.Type: boolDefault: false |
| If true, the operation inserts a document if no documents match
the query filter. Type: bool |
| The collation to use when sorting results. To learn more about collations,
see the Collations guide. Type: CollationDefault: None |
| The index to use for the operation. Type: HintDefault: None |
| 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 |
| A map of parameters and values. These parameters can be accessed
as variables in aggregation expressions. This option is available
only when connecting to MongoDB Server versions 5.0 and later. Type: Document |
| 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: BsonDefault: None |
El siguiente código muestra cómo establecer el campo upsert encadenando el método upsert() al método update_one():
let res = my_coll .update_one(filter_doc, update_doc) .upsert(true) .await?;
Información Adicional
Para más información sobre los conceptos de esta guía, consulta la siguiente documentación:
Guía de operaciones compuestas
Para ejemplos ejecutables de las operaciones de actualización y reemplazo, consulta los siguientes ejemplos de uso:
Para obtener más información sobre los operadores de actualización, consulte Operadores de actualización en el manual del servidor.
Documentación de la API
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: