Update Documents
Overview
在本指南中,您可以学习;了解如何使用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 Server手册中的查询筛选器文档部分。
更新文档:指定更新操作符或要执行的更新类型,以及要更改的字段和值。有关更新操作符及其用法的列表,请参阅MongoDB Server手册中的字段更新操作符指南。
选项文档:指定用于自定义操作的选项,或
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()
函数的行为。下表描述了您可以在文档中设立的一些选项:
选项 | 说明 |
---|---|
| 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 |
以下示例使用 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文档: