文档菜单
文档首页
/ / /
Kotlin 协程

删除文档

在本页

  • 概述
  • 示例文档
  • 删除多个文档
  • 删除文档
  • 查找并删除文档

在此指南中,您可以了解如何使用 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(
@BsonId val id: Int,
val qty: Int,
val color: String
)

油漆店网站显示 paint_inventory 集合中的所有文档。为了减少顾客的困惑,该店想要删除已售罄的颜色。

为了删除库存为零的颜色,查询paint_inventory集合,其中qty0,并将查询传递给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() 服务器手册条目

下一页

MongoDB Kotlin 驱动