删除文档
概述
在此指南中,您可以了解如何使用 MongoDB Kotlin 驱动程序删除文档。
您可以通过传递查询过滤器到deleteOne()
、deleteMany()
或 findOneAndDelete()
方法。
deleteOne()
方法删除单个文档。如果查询过滤器匹配多个文档,则该方法将删除集合中匹配的第一个文档。
deleteMany()
方法删除所有匹配查询过滤器的文档。
findOneAndDelete()
方法原子性地查找并删除集合中第一个匹配项。
要指定排序或索引提示,请将 DeleteOptions
作为 deleteOne()
和 deleteMany()
方法的第二个参数使用。
要指定排序、索引提示、返回文档上的投影或排序顺序,请将 FindOneAndDeleteOptions
作为 findOneAndDelete()
方法的第二个参数使用。
提示
在删除单个文档时,请通过唯一索引(如 _id
)过滤查询,以确保查询匹配要删除的文档。
示例文档
以下示例涉及一家销售八种不同颜色的油漆的油漆店。该店进行了年度在线销售,结果在其 paint_inventory
集合中创建了以下文档
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 8 } { "_id": 3, "color": "blue", "qty": 0 } { "_id": 4, "color": "white", "qty": 0 } { "_id": 5, "color": "yellow", "qty": 6 } { "_id": 6, "color": "pink", "qty": 0 } { "_id": 7, "color": "green", "qty": 0 } { "_id": 8, "color": "black", "qty": 8 }
这些数据通过以下 Kotlin 数据类建模
data class PaintOrder( val id: Int, val qty: Int, val color: String )
删除多个文档
油漆店网站显示 paint_inventory
集合中的所有文档。为了减少顾客的困惑,该店想要删除已售罄的颜色。
为了删除库存为零的颜色,查询paint_inventory
集合,其中qty
为0
,并将查询传递给deleteMany()
方法
val filter = Filters.eq("qty", 0) collection.deleteMany(filter)
以下显示了paint_inventory
集合中剩余的文档
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 8 } { "_id": 5, "color": "yellow", "qty": 6 } { "_id": 8, "color": "black", "qty": 8 }
删除文档
商店将捐赠剩余的黄色油漆数量。这意味着黄色油漆的qty
现在是0
,我们需要从集合中删除黄色。
为了删除黄色,查询paint_inventory
集合,其中color
为"yellow"
,并将查询传递给deleteOne()
方法
val filter = Filters.eq("color", "yellow") collection.deleteOne(filter)
以下显示了paint_inventory
集合中剩余的文档
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 8 } { "_id": 8, "color": "black", "qty": 8 }
查找并删除文档
商店希望抽取剩余的紫色油漆数量,并从paint_inventory
集合中删除紫色。
为了选择颜色,查询paint_inventory
集合,其中color
为"purple"
,并将查询传递给findOneAndDelete()
方法。与其它删除方法不同,findOneAndDelete()
返回被删除的文档
val filter = Filters.eq("color", "purple") val result = collection.findOneAndDelete(filter) println("The following was deleted: $result")
The following was deleted: PaintOrder(id=2, qty=8, color=purple)
注意
如果查询筛选器没有匹配项,则不会删除任何文档,并且方法返回null
。
以下显示了paint_inventory
集合中剩余的文档
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 8, "color": "black", "qty": 8 }
有关本指南中提到的方法和类的更多信息,请参阅以下资源
deleteOne() API 文档
deleteMany() API 文档
findOneAndDelete() API 文档
DeleteOptions API 文档
FindOneAndDeleteOptions API 文档
db.collection.deleteOne() 服务器手册条目
db.collection.deleteMany() 服务器手册条目
db.collection.findOneAndDelete() 服务器手册条目