Overview
En esta guía, puedes aprender a usar el controlador C para actualizar documentos en una colección de MongoDB. Puede llamar a la función mongoc_collection_update_one() para actualizar un único documento o a la función mongoc_collection_update_many() para actualizar varios documentos.
Datos de muestra
Los ejemplos en 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 aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulta la guía MongoDB Primeros Pasos.
Operaciones de actualizar
Puedes realizar operaciones de actualización en MongoDB utilizando las siguientes funciones:
mongoc_collection_update_one()que actualiza el primer documento que coincide con los criterios de búsquedamongoc_collection_update_many(), que actualiza todos los documentos que coinciden con los criterios de búsqueda
Cada función de actualización acepta los siguientes parámetros:
Colección: Especifica la colección a actualizar.
Documento de filtro de query: Especifica qué documentos de la colección se van a actualizar. Para más información sobre los filtros de query, consulta la sección Documentos de filtro 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.
Documento de opciones: Especifica opciones para personalizar la operación o
NULL.Ubicación de los resultados: especifica un puntero hacia el almacenamiento sobrescribible que contendrá los resultados de la operación, o
NULL.Ubicación del error: Especifica una ubicación para un valor de error, o
NULL.
Actualizar un documento
Use la siguiente sintaxis para actualizar un documento:
bson_t *query = BCON_NEW("<field to match>", BCON_UTF8("<value to match>")); bson_t *update = BCON_NEW("$set", "{", "<field name>", BCON_UTF8("<value>"), "}"); bson_error_t error; if (!mongoc_collection_update_one(collection, query, update, NULL, NULL, &error)) { fprintf(stderr, "Update one operation failed: %s\n", error.message); } bson_destroy(query); bson_destroy(update);
El siguiente ejemplo utiliza la función mongoc_collection_update_one() para actualizar el valor name de un documento en la colección restaurants de "Bagels N Buns" a "2 Bagels 2 Buns":
bson_t *query = BCON_NEW("name", BCON_UTF8("Bagels N Buns")); bson_t *update = BCON_NEW("$set", "{", "name", BCON_UTF8("2 Bagels 2 Buns"), "}"); bson_error_t error; if (!mongoc_collection_update_one(collection, query, update, NULL, NULL, &error)) { fprintf(stderr, "Update one operation failed: %s\n", error.message); } bson_destroy(query); bson_destroy(update);
Actualizar muchos documentos
Utilice la siguiente sintaxis para actualizar varios documentos:
bson_t *query = BCON_NEW("<field to match>", BCON_UTF8("<value to match>")); bson_t *update = BCON_NEW("$set", "{", "<field name>", BCON_UTF8("<value>"), "}"); bson_error_t error; if (!mongoc_collection_update_many(collection, query, update, NULL, NULL, &error)) { fprintf(stderr, "Update many operation failed: %s\n", error.message); } bson_destroy(query); bson_destroy(update);
El siguiente ejemplo utiliza la función mongoc_collection_update_many() para actualizar todos los documentos que tienen un valor cuisine de "Pizza". Después de la actualización, los documentos tienen un cuisine valor de "Pasta".
bson_t *query = BCON_NEW("cuisine", BCON_UTF8("Pizza")); bson_t *update = BCON_NEW("$set", "{", "cuisine", BCON_UTF8("Pasta"), "}"); bson_error_t error; if (!mongoc_collection_update_many(collection, query, update, NULL, NULL, &error)) { fprintf(stderr, "Update many operation failed: %s\n", error.message); } bson_destroy(query); bson_destroy(update);
Personaliza la operación de actualizar
Puedes modificar el comportamiento de las funciones mongoc_collection_update_one() y mongoc_collection_update_many() pasando un documento BSON que especifique los valores de las opciones. La siguiente tabla describe algunas opciones que se pueden configurar en el documento:
Opción | Descripción |
|---|---|
| Si se establece en |
| Establece el nivel de confirmación de escritura (write concern) para la operación. |
| Especifica el tipo de intercalación de lenguaje que se debe usar al comparar texto. Para obtener más información, consulte Intercalación en el manual de MongoDB Server. |
| Un comentario para adjuntar a la operación. Para obtener más información, consulte la guía insertar campos de comando en el manual de MongoDB Server. |
| Un comentario para adjuntar a la operación. Para obtener más información, consulte la guía insertar campos de comando en el manual de MongoDB Server. |
Realizar una inserción de un documento
El siguiente ejemplo utiliza la función mongoc_collection_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 C inserta un nuevo documento si el filtro de query no coincide con ningún documento existente.
bson_t *query = BCON_NEW("borough", BCON_UTF8("Manhattan")); bson_t *update = BCON_NEW("$set", "{", "borough", BCON_UTF8("Manhattan (north)"), "}"); bson_error_t error; bson_t opts; bson_init(&opts); bson_append_bool(&opts, "upsert", -1, true); if (!mongoc_collection_update_many(collection, query, update, &opts, NULL, &error)) { fprintf(stderr, "Update many operation failed: %s\n", error.message); } bson_destroy(query); bson_destroy(update); bson_destroy(&opts);
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 alguna de las funciones tratadas en esta guía, consulta la siguiente documentación de la API: