Docs Menu
Docs Home
/ /

Update Documents

En esta guía, aprenderá a usar el controlador de C++ para actualizar documentos en una colección de MongoDB. Puede llamar al update_one() método para actualizar un solo documento o el método update_many() para actualizar varios documentos.

Los ejemplos de esta guía utilizan la colección restaurants en la base de datos sample_restaurants de la Conjuntos de datos de muestra de Atlas. Para acceder a esta colección desde su aplicación C++, cree una mongocxx::client instancia de que se conecte a un clúster de Atlas y asigne los siguientes valores a las variables db collection y:

auto db = client["sample_restaurants"];
auto collection = db["restaurants"];

Para aprender cómo crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte la guía de introducción a MongoDB.

Puede realizar operaciones de actualización en MongoDB utilizando 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 de actualización requiere los siguientes parámetros:

  • Documento de filtro de consulta: Especifica los documentos que se actualizarán. Para obtener más información sobre los filtros de consulta, consulte la sección "Documentos de filtro de consulta" en el manual de MongoDB Server.

  • Actualizar documento: Especifica el operador de actualización, o el tipo de actualización que se realizará, y los campos y valores que se modificarán. Para obtener una lista de operadores de actualización y su uso, consulte la guía "Operadores de actualización de campos" en el manual de MongoDB Server.

El siguiente ejemplo utiliza el método update_one() para actualizar el valor name de un documento en la colección restaurants de "Bagels N Buns" a "2 Bagels 2 Buns":

auto query_filter = make_document(kvp("name", "Bagels N Buns"));
auto update_doc = make_document(kvp("$set", make_document(kvp("name", "2 Bagels 2 Buns"))));
auto result = collection.update_one(query_filter.view(), update_doc.view());

El siguiente ejemplo utiliza el método update_many() para actualizar todos los documentos cuyo valor cuisine es "Pizza". Tras la actualización, los documentos tienen un valor cuisine de "Pasta".

auto query_filter = make_document(kvp("cuisine", "Pizza"));
auto update_doc = make_document(kvp("$set", make_document(kvp("cuisine", "Pasta"))));
auto result = collection.update_many(query_filter.view(), update_doc.view());

El parámetro upsert le permite utilizar las operaciones update_one() y update_many() para realizar una operación condicional:

  • Si el documento especificado existe, el comando lo actualiza.

  • Si el documento especificado no existe, el comando creará un nuevo documento con el parámetro especificado.

Para obtener más información, consulte la sección Modificar ejemplo de actualización o la tabla de opciones en esta página.

Puedes modificar el comportamiento de los métodos update_one() y update_many() pasando una instancia de la clase mongocxx::options::update como parámetro opcional. La siguiente tabla describe los campos que puede establecer en una instancia de mongocxx::options::update:

Campo
Descripción

upsert

Specifies whether the update operation performs an upsert operation if no documents match the query filter. For more information, see the upsert statement in the MongoDB Server manual.
Defaults to false.

bypass_document_validation

Specifies whether the update operation bypasses document validation. This lets you update documents that don't meet the schema validation requirements, if any exist. For more information about schema validation, see Schema Validation in the MongoDB Server manual.
Defaults to false.

collation

Specifies the kind of language collation to use when sorting results. For more information, see Collation in the MongoDB Server manual.

array_filters

Specifies which array elements an update applies to if the operation modifies array fields.

hint

Sets the index to scan for documents. For more information, see the hint statement in the MongoDB Server manual.

write_concern

Sets the write concern for the operation. For more information, see Write Concern in the MongoDB Server manual.

let

Specifies a document with a list of values to improve operation readability. Values must be constant or closed expressions that don't reference document fields. For more information, see the let statement in the MongoDB Server manual.

comment

A comment to attach to the operation. For more information, see the insert command fields guide in the MongoDB Server manual for more information.

El siguiente ejemplo utiliza el método update_many() para buscar todos los documentos cuyo valor borough es "Manhattan". A continuación, actualiza el valor borough de estos documentos a "Manhattan (north)".

Debido a que la opción upsert está establecida en true, si el filtro de consulta no coincide con ningún documento existente, el controlador de C++ inserta un nuevo documento que contiene los campos y valores del filtro y actualiza los documentos.

mongocxx::options::update opts{};
opts.upsert(true);
auto query_filter = make_document(kvp("borough", "Manhattan"));
auto update_doc = make_document(kvp("$set", make_document(kvp("borough", "Manhattan (north)"))));
auto result = collection.update_many(query_filter.view(), update_doc.view(), opts);

Los métodos update_one() y update_many() devuelven una instancia de la clase mongocxx::result::update. Esta clase contiene las siguientes funciones miembro:

Función
Descripción

matched_count()

Returns the number of documents that matched the query filter, regardless of how many were updated.

modified_count()

Returns number of documents modified by the update operation. If an updated document is identical to the original, it is not included in this count.

result()

Returns the raw result document for the operation.

upserted_count()

Returns the number of document that were upserted into the database.

upserted_id()

Returns the ID of the document that was upserted in the database, if the driver performed an upsert.

El siguiente ejemplo utiliza el método update_many() para actualizar el campo name de los documentos coincidentes de "Dunkin' Donuts" a "Dunkin'". Llama a la función miembro modified_count() para imprimir el número de documentos modificados:

auto query_filter = make_document(kvp("name", "Dunkin' Donuts"));
auto update_doc = make_document(kvp("$set", make_document(kvp("name", "Dunkin'"))));
auto result = collection.update_many(query_filter.view(), update_doc.view());
std::cout << "Modified documents: " << result->modified_count() << std::endl;
Modified documents: 206

Para obtener más información sobre cómo crear filtros de consulta, consulte la Especifique una guía de consulta.

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

Volver

Cursors

En esta página