删除文档
概述
在本指南中,您可以了解如何使用 C 驱动程序通过执行 删除操作 从 MongoDB 集合中删除文档。
删除操作从 MongoDB 集合中删除一个或多个文档。您可以使用以下函数执行删除操作:mongoc_collection_delete_one()
或 mongoc_collection_delete_many()
函数。
示例数据
本指南中的示例使用来自 sample_restaurants
数据库中的 restaurants
集合。要了解如何创建免费 MongoDB Atlas 集群并加载示例数据集,请参阅 Atlas 入门指南。
删除操作
您可以使用以下函数执行删除操作:
mongoc_collection_delete_one()
,它删除符合搜索条件的 第一个文档。mongoc_collection_delete_many()
,用于删除所有符合搜索条件的文档
每个删除函数接受以下参数
集合:指定要修改的集合。
查询过滤器文档:指定要删除的集合文档。有关查询过滤器的更多信息,请参阅MongoDB服务器手册中的查询过滤器文档部分。
结果位置:指定一个指向可覆盖存储的指针,该存储将包含操作结果,或
NULL
。错误位置:指定一个错误值的位置,或
NULL
。
删除单个文档
以下示例使用mongoc_collection_delete_one()
函数从具有name
值为"Ready Penny Inn"
的restaurants
集合中删除一个文档。
bson_t *filter = BCON_NEW ("name", BCON_UTF8 ("Ready Penny Inn")); bson_error_t error; if (!mongoc_collection_delete_one (collection, filter, NULL, NULL, &error)) { printf ("Delete error: %s\n", error.message); } bson_destroy (filter);
删除多个文档
以下示例使用mongoc_collection_delete_many()
函数从具有borough
值为"Brooklyn"
的restaurants
集合中删除所有文档。
bson_t *filter = BCON_NEW ("borough", BCON_UTF8 ("Brooklyn")); bson_error_t error; if (!mongoc_collection_delete_many (collection, filter, NULL, NULL, &error)) { printf ("Delete error: %s\n", error.message); } bson_destroy (filter);
自定义删除操作
您可以通过传递一个指定选项值的BSON文档来修改mongoc_collection_delete_one()
和mongoc_collection_delete_many()
函数的行为。以下表格描述了您可以在文档中设置的某些选项
字段 | 描述 |
---|---|
collation | 指定比较文本时使用的语言排序类型。有关更多信息,请参阅MongoDB服务器手册中的排序。 类型: bson_t |
writeConcern | 设置操作的写关注。 默认为命名空间的写关注。 类型: mongoc_write_concern_t |
let | 指定一个包含值的文档列表,以提高操作的可读性。值必须是常量或闭包表达式,不引用文档字段。有关更多信息,请参阅MongoDB服务器手册中的let语句。 类型: bson_t |
comment | 将附加到操作的注释。有关更多信息,请参阅MongoDB服务器手册中的插入命令字段指南。 类型: bson_value_t |
以下示例调用mongoc_collection_delete_many()
函数,删除restaurants
集合中所有具有包含字符串"Mongo"
的name
值的文档。它还设置了comment
选项以添加对操作的注释
bson_t *filter = BCON_NEW ("name", "{", "$regex", BCON_UTF8 ("Mongo"), "}"); bson_error_t error; bson_t opts; bson_init(&opts); BCON_APPEND (&opts, "comment", BCON_UTF8 ("Deleting Mongo restaurants")); if (!mongoc_collection_delete_many (collection, filter, &opts, NULL, &error)) { printf ("Delete error: %s\n", error.message); } bson_destroy (filter); bson_destroy (&opts);
提示
如果您在前面的示例中使用的是mongoc_collection_delete_one()
函数而不是mongoc_collection_delete_many()
,则驱动程序将仅删除第一个具有包含字符串"Mongo"
的name
值的文档。
API文档
要了解更多关于本指南中讨论的任何函数的信息,请参阅以下API文档