Delete Documents
Overview
在本指南中,您可以学习;了解如何使用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()
,这会删除与 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() | Specifies the kind of language collation to use when sorting
results. For more information, see Collation
in the MongoDB Server manual. |
hint() | Specifies the index to use when matching documents.
For more information, see the hint statement
in the MongoDB Server manual. |
hintString() | Specifies the index as a string to use when matching documents.
For more information, see the hint statement
in the MongoDB Server manual. |
let() | Provides a map of parameter names and values to set top-level
variables for the operation. Values must be constant or closed
expressions that don't reference document fields. For more information,
see the let statement in the
MongoDB Server manual. |
comment() | Sets a comment to attach to the operation. For more
information, see the delete command
fields guide in the
MongoDB Server manual for more information. |
修改删除示例
以下代码创建选项并使用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 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: