更新文档
概述
在本指南中,您可以学习如何使用C驱动程序更新MongoDB集合中的文档。您可以通过调用mongoc_collection_update_one()
函数更新单个文档或调用 mongoc_collection_update_many()
函数更新多个文档。
示例数据
本指南中的示例使用来自Atlas 示例数据集 的 sample_restaurants
数据库中的 restaurants
集合。要了解如何创建免费的MongoDB Atlas集群并加载示例数据集,请参阅 Atlas 入门指南。
更新操作
您可以使用以下函数在MongoDB中执行更新操作
mongoc_collection_update_one()
,该函数更新满足搜索条件的第一个文档mongoc_collection_update_many()
,该函数更新满足搜索条件的所有文档
每个更新函数都接受以下参数
集合:指定要更新的集合。
查询过滤器文档:指定要更新的集合文档。有关查询过滤器的更多信息,请参阅MongoDB服务器手册中的查询过滤器文档部分。
更新文档:指定更新运算符,或要执行更新的类型,以及要更改的字段和值。有关更新运算符及其用法的列表,请参阅MongoDB服务器手册中的字段更新运算符指南。
选项文档:指定自定义操作的选项,或
NULL
。结果位置:指定指向可覆盖存储的指针,该存储将包含操作结果,或
NULL
。错误位置:指定错误值的存储位置,或
NULL
。
更新单个文档
以下示例使用mongoc_collection_update_one()
函数更新restaurants
集合中文档的name
值,从"Bagels N Buns"
更改为"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);
更新多个文档
以下示例使用 mongoc_collection_update_many()
函数来更新所有具有 cuisine
值为 "Pizza"
的文档。更新后,文档的 cuisine
值为 "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);
自定义更新操作
您可以通过传递一个指定选项值的BSON文档来修改 mongoc_collection_update_one()
和 mongoc_collection_update_many()
函数的行为。以下表格描述了您可以在文档中设置的某些选项
选项 | 描述 |
---|---|
bypassDocumentValidation | |
writeConcern | 设置操作的写关注。 默认为命名空间的写关注。 类型: mongoc_write_concern_t |
collation | 指定在比较文本时要使用的语言排序规则。有关更多信息,请参阅 MongoDB 服务器手册中的 排序规则。 类型: bson_t |
comment | 附加到操作的一则评论。有关更多信息,请参阅 MongoDB 服务器手册中的 插入命令字段 指南。 类型: bson_value_t |
upsert | 附加到操作的一则评论。有关更多信息,请参阅 MongoDB 服务器手册中的 插入命令字段 指南。 类型: bson_value_t |
以下示例使用 mongoc_collection_update_many()
函数来查找所有具有 borough
值为 "Manhattan"
的文档。然后,将这些文档中的 borough
值更新为 "Manhattan (north)"
。由于 upsert
选项设置为 true
,如果查询过滤器不匹配任何现有文档,C 驱动程序将插入一个新的文档。
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);
更多信息
有关创建查询过滤器的更多信息,请参阅指定查询指南。
API 文档
有关本指南中讨论的任何函数的更多信息,请参阅以下 API 文档