Overview
在本指南中,您可以学习如何使用Java Reactive Streams驱动程序通过执行替换操作来替换MongoDB集合中的文档。
替换操作使用您指定的新字段和值替换MongoDB集合中的一个文档。 您可以使用replaceOne()方法执行替换操作。
样本数据
本指南中的示例使用来自 Atlas 示例数据集的 sample_restaurants.restaurants 集合。
要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅入门教程。
重要
项目 Reactor 库
本指南使用 Project Reactor 库来使用Java Reactive Streams驱动程序方法返回的 Publisher 实例。要学习;了解有关 Project Reactor 库及其使用方法的更多信息,请参阅 Reactor 文档中的入门。要进一步学习;了解如何使用本指南中的 Project Reactor 库方法,请参阅“将数据写入MongoDB”指南。
替换操作
您可以在MongoCollection实例上使用replaceOne()方法执行替换操作。 此方法会从符合搜索条件的第一个文档中删除除_id字段之外的所有字段,然后将您指定的字段和值添加到空文档中。
所需参数
replaceOne() 方法需要使用以下参数:
替换文档,指定要插入新文档中的字段和值。
替换示例
要替换MongoDB集合中的单个文档,请调用 replaceOne() 方法并将查询筛选条件文档和替换文档作为参数传递。然后,将 replaceOne() 结果传递给 Mono 中的静态 Mono.from() 方法。 Mono 是 Project Reactor 库中的一个类。在Java Reactive Streams 中,驱动程序方法会返回 Publisher 冷实例,这意味着除非您订阅返回的 Publisher,否则不会发生相应的操作。本指南使用 项目 Reactor 库来使用它们。要学习;了解有关Mono 的更多信息,请参阅 项目 Reactor 文档中的 Mono。
以下示例使用replaceOne()方法将name字段值为"Pizza Town"的文档的字段和值替换。 replaceOne()方法将原始文档替换为name字段值为"Mongo's Pizza"且cuisine字段值为"Pizza"的文档。
Publisher<UpdateResult> replacePublisher = restaurants.replaceOne( eq("name", "Pizza Town"), new Document().append("name", "Mongo's Pizza") .append("cuisine", "Pizza")); Mono.from(replacePublisher).block();
修改替换行为
您可以选择通过调用选项方法来修改replaceOne()方法的行为。 ReplaceOptions类提供了修改replaceOne()方法行为的方法。 要使用ReplaceOptions类,请构造该类的新实例,然后调用其一个或多个方法来修改替换操作。 您可以将这些方法调用链接在一起。 要修改替换操作的行为,请将类实例和链式方法调用作为最后一个参数传递给replaceOne()方法。
您可以使用ReplaceOptions类中的以下方法来修改replaceOne()方法。
方法 | 说明 |
|---|---|
| |
| 指定对结果进行排序时要使用的语言排序规则类型。 有关更多信息,请参阅 MongoDB Server 手册中的排序规则。 |
| |
| |
| |
| |
| |
| 设置要应用操作的排序条件。如果多个文档与您传递给 |
|
修改替换示例
以下代码使用 replaceOne() 方法替换 restaurants集合中的文档。它还设置 upsert(true) 选项,以便驱动程序在查询筛选条件与任何现有文档都不匹配时插入新文档。
Publisher<UpdateResult> replacePublisher = restaurants.replaceOne( eq("name", "Food Town"), new Document().append("name", "Food World") .append("cuisine", "Mixed"), new ReplaceOptions().upsert(true)); Mono.from(replacePublisher).block();
返回值
replaceOne()方法返回一个UpdateResult对象。 使用UpdateResult类型中的以下方法访问权限相应信息:
属性 | 说明 |
|---|---|
| 与 查询过滤匹配的文档数量,无论有多少被替换。 |
| 替换操作修改的文档数。如果替换的文档与原始文档相同,则不计入此计数。 |
| 如果驱动程序执行了更新或插入(upsert),则为插入到数据库中的文档的ID。如果未插入文档,则此值为 |
| 确认替换。 |
更多信息
有关使用Java Reactive Streams驾驶员替换文档的可运行代码示例,请参阅增删改查操作指南。
API 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: