对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
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()

将索引指定为 string,以在匹配文档时使用。有关详细信息,请参阅 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 文档: