java 等待mongodb保存,然后执行下一步

vhmi4jdf  于 2023-01-29  发布在  Java
关注(0)|答案(1)|浏览(101)

我有一个文档列表,在对它们执行了一些进程之后,我需要将它们保存在mongoDB上。
我有一个React性的mongoDB依赖项,所以我想使用它。如果可能的话,我想避免使用另一个依赖项(非React性的)。第二个文档处理应该在第一个文档保存后开始。

Mono<List<Index>> deferredCreate = Mono.defer(() -> index
            .flatMapMany(Flux::fromIterable)
            .flatMapSequential(entity -> {
                            repository.process(entity).subscribe();
                            return entity;
                        })
            )
            .collectList());

public Mono<IndexDocument> process(Index index) {
          if(someCondition) { return mongoOperations.save(index); }
          else { return mongoOperations.findAndReplace(query, index); }
}

在这里,列表是按索引处理的,但是索引n+1处理在索引n开始之后开始,我需要它在n处理完成之后开始。我不能用.block()代替subscriber,否则我会出错(block不能用于并行流)。我尝试了concatMap,但是这是一样的。
有什么方法可以做到吗?我使用React式编程,因为这是需要React的更大过程的一部分。

cbeh67ev

cbeh67ev1#

正如我在评论中提到的,你不应该明确subscribeflatMapSequential将在幕后订阅,并保留原来的订单

Mono<List<Index>> deferredCreate = Mono.defer(() -> index
     .flatMapMany(Flux::fromIterable)
     .flatMapSequential(entity -> 
             repository.process(entity)
                    .thenReturn(entity)
     )
     .collectList());

相关问题