使用 ReactiveMongoTemplate 批量更新

Posted

技术标签:

【中文标题】使用 ReactiveMongoTemplate 批量更新【英文标题】:Bulk Update with ReactiveMongoTemplate 【发布时间】:2021-10-24 12:59:27 【问题描述】:

在响应式 Spring Boot 应用程序中,我有一个要更新的项目列表。我想向我的数据库发送一个 SINGLE 命令以将更改应用于不同的项目。如果我可以说,相当于 db.collection.updateMany。可能吗?怎么样?

【问题讨论】:

是的,有可能。 【参考方案1】:

是的,这是可能的, ReactiveMongoTemplate 有

updateMulti(Query query, UpdateDefinition update, Class<?> entityClass)

使用提供的更新文档更新在集合中找到的与查询文档条件匹配的实体类的所有对象。

【讨论】:

如果我使用查询在项目列表中找到项目 1,我猜我可以用 UpdateDefinition 更新它。第2项呢?第 3 项……?我是否需要编写与要更新的项目一样多的 updateMulti?如果是这样,我可以只使用存储库 saveAll。我需要的是发送一个 SINGLE mongodb 命令来更新所有项目。 是的,您可以使用 saveAll() 或 insert(Collection extends T> batchToSave, Class> entityClass) 将对象集合插入到集合中,以单个批量写入数据库。 reactor.core.publisher.Flux insert(Collection extends T> batchToSave, String collectionName) 将一批对象插入到指定的集合中,一次批量写入数据库。 插入不更新。 saveAll 确实会更新,但不会在单个批次中更新。我需要的是一种批量更新的方法。 @lori Yagami,你有解决办法吗?

以上是关于使用 ReactiveMongoTemplate 批量更新的主要内容,如果未能解决你的问题,请参考以下文章

@@ DataJpaTest无法排除反应性mongo的存储库

通过动态查询在ReactiveMongoRepository上实现分页和排序。

反应式 mongo 模板:mongo 4.4.0 上的“''cursor' 选项是必需的”

测试使用

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?