文档菜单
文档首页
/ / /
C 驱动程序
/

更新文档

本页内容

  • 概述
  • 示例数据
  • 更新操作
  • 更新单个文档
  • 更新多个文档
  • 自定义更新操作
  • 更多信息
  • API 文档

在本指南中,您可以学习如何使用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
如果设置为 true,则允许写操作退出 文档级验证
默认为 false
类型: bool
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 文档

返回

替换文档