java - Spring Webflux 响应式(Reactive) Mongo 批量操作 (Java)

标签 java spring mongodb spring-webflux reactive-mongo-java

https://github.com/spring-projects/spring-data-mongodb/issues/2821

https://jira.spring.io/browse/DATAMONGO-1922?redirect=false

我一直在寻找 ReactiveBulk 操作来在 Spring WebFlux 中批量更新文档。

就像 Mongo 模板一样

var bulkOps = mongoTemplate.bulkOps()
for(dto : List<DTO> DTOs) {
  Query query = new Query();
  query.addCriteria(Criteria.where(ID).is(dto.getId()));
  Update update = new Update()
                    .set(STATUS, dto.getStatus())
  bulkOps.updateOne(query, update)
}
bulkOps.execute();

由于reactivemongotemplate当前看起来不支持该操作,是否有解决方法以 react 方式实现该操作?

类似主题:Bulk Update with ReactiveMongoTemplate

最佳答案

快速提醒一下 Bulk 与 UpdateMulti 不同。

批量意味着在单个查询中写入多个对象,因此更新多个对象。另一方面,UpdateMulti 旨在更新表达式匹配的所有行

对于响应式(Reactive)批量,您应该能够使用 ReactiveMongoTemplate 并实现类似的东西:

reactiveMongoTemplate.getCollection("collection_name")
    .flatMap(mongoCollection -> {
            List<UpdateOneModel<Document>> operations = DTOs.stream()
                .map(dto -> {
                    Document doc = new Document("status", dto.getStatus());
                    
                    reactiveMongoTemplate.getConverter().write(dto, doc);
                    
                    Document filter = new Document("id", dto.getId());
                    
                    return new UpdateOneModel<Document>(filter, new Document("$set", doc))
                }).toList();
        
            return Mono.from(mongoCollection.bulkWrite(operations));
    });

如果需要,您还可以向 bulkWrite() 添加自定义选项。

如果需要更多过滤器,您可以将它们附加到文档中

Document filter = new Document("id", dto.getId())
     .append("country", dto.getCountry);

关于java - Spring Webflux 响应式(Reactive) Mongo 批量操作 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72320304/

相关文章:

node.js - 在 node.js 和 mongodb 中处理异步数据库查询

javascript - 具有多个参数的 Mongodb findOne

java - 将java类导入jsp导致无法解析为类型错误

java - 在没有 WebMvcConfigurationSupport 的情况下注册 Spring HandlerInterceptor

java - Hibernate 更新查询第二次不起作用

java - 在 Spring MVC 中,使用 'redirect:process' 或 'redirect:/process' 在导致丢失 session 或 session 值方面是否有所不同?

Haskell 不明确的类型变量——我迷路了?

java - 从数据库获取信息

针对 VS 用户的 Java IDE 推荐(GUI 设计器、ORM 设计器等)

java - @Consume 的运行时内容协商