Overview
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.
Datos de muestra
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.
Operaciones de actualizar
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úsquedaupdate_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.
Actualizar un documento
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());
Actualizar muchos documentos
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());
Personaliza la operación de actualizar
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 |
|---|---|
| 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 |
| 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. |
| 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. |
| Especifica a qué elementos del arreglo se aplica una actualización si la operación modifica los campos del arreglo. |
| Establece el índice para buscar documentos. Para más información, consulta la instrucción de pistas en el manual de MongoDB Server. |
| 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. |
| 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. |
| 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);
Valor de retorno
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 |
|---|---|
| Devuelve el número de documentos que coincidieron con el filtro de query, independientemente de cuántos se actualizaron. |
| 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. |
| Devuelve el documento del resultado sin procesar de la operación. |
| Devuelve el número de document que fueron insertados o actualizados en la base de datos. |
| 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
Información Adicional
Para obtener más información sobre cómo crear filtros de query, se puede consultar la Especificar una query.
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: