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.
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
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 tu aplicación en C++, instancia un mongocxx::client que se conecte a un clúster Atlas y asigna los siguientes valores a tus variables db y collection:

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 ejemplo, consulta la guía MongoDB Get Started.

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 a realizar, así como los campos y valores que se deben cambiar. Para obtener una lista de operadores de actualización y su uso, consulta 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 actualización realiza una operación de inserción/actualización si ningún documento coincide con el filtro de consulta. Para obtener más información, consulte la instrucción `upsert` en el manual del servidor MongoDB. El
valor predeterminado false es.

bypass_document_validation

Especifica si la operación de actualización omite la validación del documento. Esto permite actualizar documentos que no cumplen con los requisitos de validación del esquema, si los hubiera. Para obtener más información sobre la validación del esquema, consulte Validación de esquema en el manual del servidor MongoDB.
El valor predeterminado false es.

collation

Especifica el tipo de intercalación de lenguaje a usar 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 buscar documentos. Para más información, consulta la instrucción de pistas en el manual de MongoDB Server.

write_concern

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

let

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

comment

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

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: