Overview
En esta guía, aprenderás a usar el driver de C para actualizar documentos en una colección de MongoDB. Puedes llamar al mongoc_collection_update_one()
función para actualizar un solo documento o la función mongoc_collection_update_many() para actualizar varios documentos.
Datos de muestra
Los ejemplos de esta guía usan la colección restaurants en la base de datos sample_restaurants de la 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 ejemplo, consulta la guía Introducción a MongoDB.
Operaciones de actualizar
Puede 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á, 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.
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
NULLo.
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 |
|---|---|
| If set to true, allows the write operation to opt out of
document-level validation.Defaults to false.Type: bool |
| Sets the write concern for the operation. Defaults to the write concern of the namespace. Type: mongoc_write_concern_t |
| Specifies the kind of language collation to use when comparing
text. For more information, see Collation
in the MongoDB Server manual. Type: bson_t |
| A comment to attach to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. Type: bson_value_t |
| A comment to attach to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. Type: bson_value_t |
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 consulta, consulte la Guía '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: