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

Update Documents

En esta guía, puede aprender cómo utilizar el controlador C++ para actualizar documentos en una colección de MongoDB. Puedes llamar al método update_one() para actualizar un solo documento o al 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 los conjuntos de datos de muestra de Atlas. Para acceder a esta colección desde su aplicación C++, cree una instancia de mongocxx::client que se conecte a un clúster de Atlas y asigne los siguientes valores a sus variables db y collection:

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

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

Puedes 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 query: Especifica qué documentos actualizar. Para obtener más información sobre los filtros de query, consulta la sección Documentos de filtros de query en el manual de MongoDB Server.

  • Actualizar documento: especifica el operador de actualización o el tipo de actualización que se realizará, así como los campos y valores que se modificarán. Para obtener una lista de los operadores de actualización y su uso, consulte la guía de 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 que tengan un valor cuisine de "Pizza". Después de la actualización, los documentos tienen un cuisine valor 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());

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

Especifica si la operación de actualizar realiza una operación de inserción si ningún documento coincide con el filtro de query. Para más información, consulta la instrucción de inserción en el manual del MongoDB Server.
Por defecto, false.

bypass_document_validation

Especifica si la operación de actualizar omite la validación del documento. Esto permite actualizar documentos que no cumplen con los requisitos de validación de esquema, si existen. Para obtener más información sobre la validación de esquemas, consulte Validación de esquemas en el manual de MongoDB Server.
Por defecto, false.

collation

Especifica el tipo de intercalación de lenguaje a utilizar al ordenar los resultados. Para obtener más información, consulte intercalación en el manual de MongoDB Server.

array_filters

Especifica a qué elementos del arreglo se aplica una actualización si la operación modifica los campos del arreglo.

hint

Establece el índice para escanear documentos. Para obtener más información, consulte la instrucción de sugerencia en el manual de MongoDB Server.

write_concern

Establece el nivel de confirmación de escritura (write concern) para la operación. Para obtener más información, consulta nivel de confirmación de escritura (write concern) en el manual de MongoDB Server.

let

Especifica un documento que contiene una lista de valores para mejorar la legibilidad de la operación. Los valores deben ser constantes o expresiones cerradas que no hagan referencia a campos de documento. Para más información, consulta la instrucción let en el manual del MongoDB Server.

comment

Un comentario para adjuntar a la operación. Para más información, consulta la guía de campos de comando de inserción en el manual del MongoDB Server.

El siguiente ejemplo utiliza el método update_many() para encontrar todos los documentos que tienen borough valor de "Manhattan". Luego actualiza el valor borough en estos documentos a "Manhattan (north)". Debido a que la opción upsert está configurada en true, el driver de C++ inserta un nuevo documento si el filtro de query no coincide con ningún documento existente.

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()

Devuelve el número de documentos que coincidieron con el filtro de query, independientemente de cuántos se actualizaron.

modified_count()

Devuelve el número de documentos modificados por la operación de actualización. Si un documento actualizado es idéntico al original, no se incluye en este conteo.

result()

Devuelve el documento del resultado sin procesar de la operación.

upserted_count()

Devuelve el número de document que fueron insertados o actualizados en la base de datos.

upserted_id()

Devuelve el ID del document que fue inserción en la base de datos, si el driver realizó una inserción.

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 nodo 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 query, se puede consultar la Especificar una query.

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