对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs 菜单

Delete Documents

在本指南中,您可以学习如何使用C++驱动程序通过执行删除操作从MongoDB集合中删除文档。

删除操作可从 MongoDB 集合中删除一个或多个文档。 您可以使用delete_one()delete_many()方法执行删除操作。

本指南中的示例使用Atlas示例数据集sample_restaurants数据库中的restaurants集合。 要从C++应用程序访问权限此集合,请实例化一个连接到Atlas 集群的mongocxx::client ,并将以下值分配给dbcollection变量:

auto db = client["sample_restaurants"];
auto collection = db["restaurants"];

要学习如何创建免费的MongoDB Atlas 集群并加载示例数据集,请参阅MongoDB 入门指南

您可以通过以下方法执行删除操作:

  • delete_one(),这会删除与 Atlas Search条件匹配的 第一个文档

  • delete_many(),这会删除与 Atlas Search条件匹配的 所有文档

每个删除方法都需要一个查询过滤文档,它指定搜索条件以确定选择要删除的文档。 有关查询筛选器的更多信息,请参阅MongoDB Server手册中的查询筛选器文档部分

以下示例使用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实例中设立的字段:

字段
说明

collation

指定对结果进行排序时要使用的语言排序规则类型。 有关更多信息,请参阅 MongoDB Server 手册中的排序规则

write_concern

设置操作的写关注(write concern)。 有关更多信息,请参阅MongoDB Server手册中的写关注。

hint

获取或设置用于扫描文档的索引。 有关更多信息,请参阅 MongoDB Server 手册中的提示语句

let

指定包含值列表的文档,以提高操作的可读性。 值必须是常量或不引用文档字段的闭合表达式。 有关更多信息,请参阅MongoDB Server手册中的 let声明。

comment

为操作附加注释。 有关更多信息,请参阅MongoDB Server手册中的删除命令字段指南。

以下示例调用 delete_many() 方法删除restaurants集合中 name 值包含string "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 文档: