文档菜单
文档首页
/ / /
C++ 驱动
/

删除文档

本页内容

  • 概述
  • 示例数据
  • 删除操作
  • 删除单个文档
  • 删除多个文档
  • 自定义删除操作
  • 返回值
  • API 文档

在本指南中,您可以学习如何使用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集群并加载数据集的说明,请参阅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 实例中设置的字段

字段
描述

collation

指定在排序结果时使用的语言排序类型。有关更多信息,请参阅 MongoDB 服务器手册中的 排序

write_concern

设置操作的写关注点。有关更多信息,请参阅 MongoDB 服务器手册中的 写关注点

hint

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

let

指定一个包含值的文档列表,以提高操作的可读性。值必须是常量或封闭表达式,不能引用文档字段。有关更多信息,请参阅 MongoDB 服务器手册中的 let 语句

comment

将注释附加到操作。有关更多信息,请参阅 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 文档

返回

替换