对于 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

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

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

本指南中的示例使用来自 Atlas 示例数据集sample_restaurants.restaurants 集合。要了解如何创建免费的 MongoDB 部署并加载示例数据集,请参阅 MongoDB入门指南。

此集合中的文档由以下Kotlin数据类建模:

data class Restaurant(val name: String, val borough: String)

您可以使用以下方法在 MongoDB 中执行删除操作:

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

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

每个删除方法都需要一个查询过滤文档,它指定了搜索条件,以确定选择要删除的文档。 如需学习;了解有关查询筛选器的更多信息,请参阅“指定查询”指南。

以下示例使用deleteOne()方法删除name字段值为"Happy Garden"的文档:

val filter = eq(Restaurant::name.name, "Happy Garden")
val result = collection.deleteOne(filter)

以下示例使用deleteMany()方法删除borough字段值为"Brooklyn"name字段值为"Starbucks"的所有文档:

val filter = and(
eq(Restaurant::borough.name, "Brooklyn"),
eq(Restaurant::name.name, "Starbucks")
)
val result = collection.deleteMany(filter)

deleteOne()deleteMany() 方法可以选择接受 DeleteOptions 参数,该参数表示可用于配置删除操作的选项。如果不指定任何选项,驱动程序将使用默认设置执行删除操作。

下表描述了可用于配置DeleteOptions实例的 setter 方法:

方法
说明

collation()

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

hint()

指定匹配文档时要使用的索引。有关更多信息,请参阅MongoDB Server手册中的提示声明。

hintString()

将索引指定为匹配文档时使用的字符串。有关更多信息,请参阅MongoDB Server手册中的提示声明。

let()

提供参数名称和值的映射,以便为操作设立顶级变量。 值必须是常量或不引用文档字段的闭合表达式。 有关更多信息,请参阅MongoDB Server手册中的 let声明。

comment()

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

以下代码创建选项并使用comment()方法为删除操作添加注释。 然后,该示例使用 deleteMany() 方法删除restaurants集合中 name字段的值包含string "Red" 的所有文档。

val opts = DeleteOptions().comment("sample comment")
val filter = regex(Restaurant::name.name, "Red")
val result = collection.deleteOne(filter, opts)

提示

如果在上示例中使用 deleteOne() 方法而不是 deleteMany() 方法,则驱动程序仅删除与查询筛选条件匹配的第一个文档。

deleteOne()deleteMany()方法各返回一个DeleteResult实例。 您可以从DeleteResult实例访问权限以下信息:

  • deletedCount,表示已删除的文档数

  • wasAcknowledged(),如果服务器确认结果,则返回true

如果查询筛选条件未匹配任何文档,则驱动程序不会删除任何文档,并且 deletedCount 的值为 0

注意

如果 wasAcknowledged() 方法返回 false,则尝试访问权限deletedCount属性会导致 InvalidOperation 异常。如果服务器未确认写入操作,则驱动程序无法确定这些值。

要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: