Docs 菜单
Docs 主页
/ / /
Scala
/

Delete Documents

在此页面上

  • Overview
  • 样本数据
  • 删除操作
  • 删除一个文档
  • 删除多个文档
  • 自定义删除操作
  • 返回值
  • API 文档

在本指南中,您可以学习;了解如何使用Scala驾驶员通过执行删除操作从MongoDB集合中删除文档。

删除操作可从 MongoDB 集合中删除一个或多个文档。 您可以使用 deleteOne()deleteMany()方法执行删除操作。

本指南中的示例使用restaurants sample_restaurantsAtlas示例数据集的 数据库中的 集合。要从Scala应用程序访问权限此集合,请创建一个连接到AtlasMongoClient 集群的database ,然后为 和collection 变量分配以下值:

val database: MongoDatabase = mongoClient.getDatabase("sample_restaurants")
val collection: MongoCollection[Document] = database.getCollection("restaurants")

要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅Atlas入门指南。

您可以使用以下方法在 MongoDB 中执行删除操作:

  • deleteOne(),这会删除与 Atlas Search条件匹配的 第一个文档

  • deleteMany(),这会删除与 Atlas Search条件匹配的 所有文档

每个删除方法都需要一个查询过滤文档,它指定了搜索条件,以确定选择要删除的文档。 要学习;了解有关查询筛选器的更多信息,请参阅《 指定查询》指南。

以下示例使用deleteOne()方法删除name字段值为"Happy Garden"的文档:

val filter = equal("name", "Happy Garden")
val observable: Observable[DeleteResult] = collection.deleteOne(filter)
observable.subscribe(new Observer[DeleteResult] {
override def onNext(result: DeleteResult): Unit = println(s"Deleted document count: ${result.getDeletedCount}")
override def onError(e: Throwable): Unit = println(s"Error: $e")
override def onComplete(): Unit = println("Completed")
})
Deleted document count: 1
Completed

以下示例使用deleteMany()方法删除borough字段值为"Brooklyn"name字段值为"Starbucks"的所有文档:

val filter = and(
equal("borough", "Brooklyn"),
equal("name", "Starbucks")
)
val observable: Observable[DeleteResult] = collection.deleteMany(filter)
observable.subscribe(new Observer[DeleteResult] {
override def onNext(result: DeleteResult): Unit = println(s"Deleted document count: ${result.getDeletedCount}")
override def onError(e: Throwable): Unit = println(s"Error: $e")
override def onComplete(): Unit = println("Completed")
})
Deleted document count: 3
Completed

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 option in the delete reference page of the MongoDB Server manual.

hintString()

Specifies the index as a string to use when matching documents. For more information, see the hint option in the `` delete`` reference page of 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 option in the delete reference page of the MongoDB Server manual.

comment()

Sets a comment to attach to the operation. For more information, see the Command Fields section in the delete reference page of the MongoDB Server manual.

以下代码创建选项并使用comment()方法为删除操作添加注释。 然后,该示例使用 deleteMany() 方法删除restaurants集合中 name字段的值包含string "Red" 的所有文档。

val filter = regex("name", "Red")
val opts = DeleteOptions().comment("sample comment")
val observable = collection.deleteMany(filter, opts)
observable.subscribe(new Observer[DeleteResult] {
override def onNext(result: DeleteResult): Unit = println(s"Deleted document count: ${result.getDeletedCount}")
override def onError(e: Throwable): Unit = println(s"Error: $e")
override def onComplete(): Unit = println("Completed")
})
Deleted document count: 124
Completed

提示

如果在上示例中使用deleteOne()方法而不是deleteMany()方法,则驾驶员仅删除与查询过滤匹配的第一个文档。

deleteOne()deleteMany()方法各返回一个DeleteResult实例。 您可以从DeleteResult实例访问权限以下信息:

  • deletedCount,表示已删除的文档数

  • wasAcknowledged(),如果服务器确认结果,则返回true

如果查询过滤未匹配任何文档,则驾驶员不会删除任何文档,并且 deletedCount 的值为 0

注意

如果wasAcknowledged()方法返回false ,则尝试访问权限deletedCount属性会导致InvalidOperation异常。 如果服务器未确认写入操作,则驾驶员无法确定这些值。

要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档:

后退

Update