删除文档
概述
在本指南中,您可以学习如何使用C++驱动程序通过执行删除操作来从MongoDB集合中删除文档。
删除操作从MongoDB集合中删除一个或多个文档。您可以通过以下方式执行删除操作:delete_one()
或delete_many()
方法。
示例数据
本指南中的示例使用来自Atlas示例数据集的sample_restaurants
数据库中的restaurants
集合。要从您的C++应用程序中访问此集合,请创建一个连接到Atlas集群的mongocxx::client
实例,并将以下值分配给您的db
和collection
变量
auto db = client["sample_restaurants"]; auto collection = db["restaurants"];
有关如何创建免费的MongoDB Atlas集群并加载数据集的说明,请参阅Atlas入门指南。
删除操作
您可以通过以下方法执行删除操作
delete_one()
,该函数删除符合搜索条件的第一个文档delete_many()
,该函数删除符合搜索条件的所有文档
每个删除方法都需要一个查询过滤器文档,该文档指定了搜索条件,以确定要删除哪些文档。有关查询过滤器的更多信息,请参阅MongoDB服务器手册中的查询过滤器文档部分。
删除单个文档
以下示例使用delete_one()
方法从restaurants
集合中删除一个具有name
值为"Ready Penny Inn"
的文档
auto result = collection.delete_one(make_document(kvp("name", "Ready Penny Inn")));
删除多个文档
以下示例使用 delete_many()
方法删除 restaurants
集合中所有 borough
值为 "Brooklyn"
的文档。
auto result = collection.delete_many(make_document(kvp("borough", "Brooklyn")));
自定义删除操作
您可以通过传递 mongocxx::options::delete_options
类的实例作为可选参数来修改 delete_one()
和 delete_many()
方法的行为。以下表格描述了您可以在 mongocxx::options::delete_options
实例中设置的字段
字段 | 描述 |
---|---|
| 指定在排序结果时使用的语言排序类型。有关更多信息,请参阅 MongoDB 服务器手册中的 排序。 |
| 设置操作的写关注点。有关更多信息,请参阅 MongoDB 服务器手册中的 写关注点。 |
| 获取或设置用于扫描文档的索引。有关更多信息,请参阅 MongoDB 服务器手册中的 提示语句。 |
| 指定一个包含值的文档列表,以提高操作的可读性。值必须是常量或封闭表达式,不能引用文档字段。有关更多信息,请参阅 MongoDB 服务器手册中的 let 语句。 |
| 将注释附加到操作。有关更多信息,请参阅 MongoDB 服务器手册中的 delete 命令字段指南。 |
以下示例调用 delete_many()
方法删除 restaurants
集合中所有 name
值包含字符串 "Mongo"
的文档。它还设置了 mongocxx::options::delete_options
实例的 comment
字段,以在操作中添加注释。
mongocxx::options::delete_options opts{}; opts.comment(bsoncxx::types::bson_value::view_or_value{"Deleting Mongo restaurants"}); auto query_filter = make_document(kvp("name", make_document(kvp("$regex", "Mongo")))); auto result = collection.delete_many(query_filter.view(), opts);
提示
如果前面的示例使用的是 delete_one()
方法而不是 delete_many()
,则驱动程序将仅删除第一个 name
值包含 "Mongo"
的文档。
返回值
delete_one()
和 delete_many()
方法返回 mongocxx::result::delete_result
类的实例。此类包含以下成员函数
result()
,它返回原始的批量写入结果deleted_count()
,它返回被删除的文档数量
如果查询过滤器没有匹配任何文档,驱动程序不会删除任何文档,并且 deleted_count
为 0。
以下示例调用 delete_many()
方法来删除具有 cuisine
值为 "Greek"
的文档。然后它调用 deleted_count()
成员函数来打印被删除的文档数量
auto result = collection.delete_many(make_document(kvp("cuisine", "Greek"))); std::cout << result->deleted_count() << std::endl;
Deleted documents: 111
API 文档
要了解更多关于本指南中讨论的任何方法或类型的信息,请参阅以下 API 文档