删除文档
概述
在本指南中,您可以了解如何使用 Kotlin Sync 驱动通过执行 删除操作 从 MongoDB 集合中删除文档。
删除操作可以从 MongoDB 集合中删除一个或多个文档。您可以使用以下方式执行删除操作:deleteOne()
或 deleteMany()
方法。
示例数据
本指南中的示例使用来自Atlas 示例数据集 的 sample_restaurants.restaurants
集合。要了解如何创建免费的 MongoDB Atlas 集群并加载示例数据集,请参阅 Atlas 入门指南。
此集合中的文档由以下 Kotlin 数据类建模
data class Restaurant(val name: String, val borough: String)
删除操作
您可以使用以下方法在 MongoDB 中执行删除操作:
deleteOne()
,该操作删除与搜索条件匹配的第一个文档deleteMany()
,该操作删除与搜索条件匹配的所有文档
每个删除方法都需要一个 查询过滤器 文档,该文档指定了确定要删除哪些文档的搜索条件。有关查询过滤器的更多信息,请参阅指定查询 指南。
删除一个文档
以下示例使用 deleteOne()
方法删除名称字段值为 "Happy Garden"
的文档。
val filter = eq(Restaurant::name.name, "Happy Garden") val result = collection.deleteOne(filter)
删除多个文档
以下示例使用 deleteMany()
方法删除所有位于 "Brooklyn" 区且名称字段值为 "Starbucks" 的文档。
val filter = and( eq(Restaurant::borough.name, "Brooklyn"), eq(Restaurant::name.name, "Starbucks") ) val result = collection.deleteMany(filter)
自定义删除操作
deleteOne()
和 deleteMany()
方法可以接受一个可选的 DeleteOptions
参数,该参数代表你可以用来配置删除操作的选项。如果你没有指定任何选项,驱动程序将使用默认设置执行删除操作。
以下表格描述了你可以用来配置 DeleteOptions
实例的设置方法
方法 | 描述 |
---|---|
collation() | 指定在排序结果时使用的语言排序类型。有关更多信息,请参阅 MongoDB 服务器手册中的排序。 |
hint() | 指定在匹配文档时使用的索引。有关更多信息,请参阅 MongoDB 服务器手册中的提示语句。 |
hintString() | 指定索引作为字符串,用于匹配文档。有关更多信息,请参阅MongoDB服务器手册中的提示语句。 |
let() | 提供参数名称和值的映射,用于设置操作的顶层变量。值必须是常量或封闭表达式,不能引用文档字段。有关更多信息,请参阅MongoDB服务器手册中的let语句。 |
comment() | 设置要附加到操作的注释。有关更多信息,请参阅MongoDB服务器手册中有关删除命令字段的指南。 |
修改删除示例
以下代码创建选项,并使用comment()
方法将注释添加到删除操作。然后,示例使用deleteMany()
方法删除restaurants
集合中所有name
字段值包含字符串"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 文档
要了解本指南中讨论的任何方法或类型,请参阅以下API文档