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

Modificar documentos

En esta guía, puedes aprender a modificar documentos en MongoDB usando las operaciones de actualización y reemplazo.

Las operaciones de actualización cambian los campos que especificas sin modificar los demás campos y valores. Las operaciones de reemplazo eliminan todos los campos existentes de un documento, excepto el campo _id, y sustituyen los campos eliminados por nuevos campos y valores.

Esta guía incluye las siguientes secciones:

En MongoDB, todos los métodos para cambiar documentos siguen el mismo patrón:

changeX() method signature

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

  • (Opcional) Un tipo de opciones para modificar el comportamiento por defecto del método

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.

Cada documento en una colección de MongoDB tiene un campo único e inmutable _id. Si intenta cambiar el campo _id mediante una operación de actualización o reemplazo, el controlador genera un WriteError y no realiza actualizaciones.

Se pueden realizar operaciones de actualización con los siguientes métodos:

  • update_one()que actualiza el primer documento que coincide con los criterios de búsqueda.

  • update_many(), que actualiza todos los documentos que coinciden con los criterios de búsqueda

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

Si utilizas una versión 4.2 o posterior de MongoDB Server, puedes usar pipelines de agregación en operaciones de actualización. Para aprender más sobre las etapas de agregación que MongoDB admite en pipelines de agregación, consulta nuestro tutorial sobre cómo realizar actualizaciones con pipelines de agregación.

Las operaciones de actualización también toman un parámetro UpdateOptions. Para aprender más sobre cómo modificar el comportamiento de los métodos de actualización, consulte la sección Modifique el comportamiento de actualización y reemplazo de esta guía.

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

matched_count

El número de documentos que coinciden con el filtro

modified_count

El número de documentos modificados por la operación

upserted_id

El _id del documento actualizado o vacío si no existe ninguno

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.

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 department sea "Marketing"

  • Un documento de actualización que contiene las siguientes actualizaciones:

    • Un operador $set para cambiar el valor de department a "Business Operations" y de role a "Analytics Specialist"

    • Un operador $inc para aumentar el valor de bonus en 500

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, None)
.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
}

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 _id es ObjectId('4274')

  • Actualizar el documento que crea instrucciones para establecer el valor de name a "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, None)
.await?;
println!("Modified documents: {}", res.modified_count);
Modified documents: 1

El siguiente documento refleja los cambios resultado 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.

Puedes 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 nuevos campos y valores que usted especifique.

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>, ... }

Las operaciones de reemplazo también toman un parámetro UpdateOptions. Para aprender a modificar el comportamiento del método replace_one(), consulta la sección Modificar el comportamiento de actualización y reemplazo de esta guía.

El método replace_one devuelve un tipo UpdateResult si la operación es exitosa. El tipo UpdateResult contiene las siguientes propiedades que describen la operación:

Propiedad
Descripción

matched_count

El número de documentos que coinciden con el filtro

modified_count

El número de documentos modificados por la operación

upserted_id

El _id del documento actualizado o vacío si no existe ninguno

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.

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 name de "Susan Lee"

  • Un valor role de "Lead Consultant"

  • Un valor team_members de [ "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, None)
.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" ]
}

Puedes modificar el comportamiento de los métodos update_one(), update_many y replace_one() construyendo y pasando un struct UpdateOptions como parámetro.

Nota

Opciones de instanciación

El driver de Rust implementa el patrón de diseño Builder para la creación de muchos tipos diferentes, incluido UpdateOptions. Puedes usar el método builder() de cada tipo para construir una instancia de opciones encadenando funciones constructoras de opciones una tras otra.

La siguiente tabla describe las opciones disponibles en UpdateOptions:

Opción
Descripción

array_filters

El conjunto de filtros que especifica los elementos del arreglo a los que se aplica la actualización.

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 la guía sobre validación de esquema.

Tipo: bool
Por defecto: false

upsert

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

Tipo: bool

collation

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

Tipo: Collation
Por defecto: None

hint

El índice que se utilizará para la operación. Esta opción solo está disponible al conectarse a MongoDB Server versiones 4.2 y posteriores.

Tipo: Hint
Por defecto: None

write_concern

El nivel de confirmación de escritura (write concern) para la operación. Si no establece esta opción, la operación hereda el nivel de confirmación de escritura (write concern) establecido para la colección. Para obtener más información sobre el nivel de confirmación de escritura (write concern), consulta Nivel de confirmación de escritura (write concern) en el manual del servidor.

Tipo: WriteConcern

let_vars

Un mapa de parámetros y valores. Se puede acceder a estos parámetros como variables en las 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 valor Bson arbitrario vinculado a la operación para rastrearlo a través del perfilador de base de datos, currentOp y los registros. Esta opción solo está disponible cuando se conecta a MongoDB Server versiones 4.4 y posteriores.

Tipo: Bson
Por defecto: None

El siguiente código muestra cómo construir una instancia UpdateOptions y pasarla al método update_one():

let opts: UpdateOptions = UpdateOptions::builder().upsert(true).build();
let res = my_coll.update_one(filter_doc, update_doc, opts).await?;

Para más información sobre los conceptos de esta guía, consulta la siguiente documentación:

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.

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: