Java 8 如何将对象保存到flux中的反应式存储库

Java 8 如何将对象保存到flux中的反应式存储库,java-8,spring-webflux,project-reactor,Java 8,Spring Webflux,Project Reactor,我有问题的答案清单。我想保存这些答案,然后(在mongo给他们一个id后)将它们添加到他们的问题中 现在我这样做: 公共答案(列出答案){ 返回answerRepository.saveAll(答案) .map(答案->{ questionRepository.findById(answer.getQuestionId()) .订阅(问题->{ question.getAnswers().removeIf(ans->Objects.equals(ans.getId(),answer.getId(

我有问题的答案清单。我想保存这些答案,然后(在mongo给他们一个id后)将它们添加到他们的问题中

现在我这样做:

公共答案(列出答案){
返回answerRepository.saveAll(答案)
.map(答案->{
questionRepository.findById(answer.getQuestionId())
.订阅(问题->{
question.getAnswers().removeIf(ans->Objects.equals(ans.getId(),answer.getId());
question.getAnswers().add(答案);
questionRepository.save(question.block();
});
返回答案;
});
}
我还尝试了
.saveAll(answers).doOnNext()
doOnEach()
,但这样就不会保存问题

似乎map是用来转换数据的,而不是用来对每个元素进行操作。另外,我对调用
block()
有点困惑


有没有更好的方法来实现我的目标

在返回反应类型本身的方法中,决不能对
Flux
Mono
调用
subscribe
/
block

这样做将使当前管道与您试图实现的目标脱钩。最佳情况下,这将打破背压支持。在许多情况下,这也可能以令人惊讶的方式打破;例如,如果您的方法正在处理HTTP请求/响应或某种会话,则响应/会话可能会关闭,而您的其他订户仍在尝试对其执行某些操作

我相信这样做更为一致(尽管我在这里遗漏了很多上下文,所以这可能不是实现这一点的最佳方式):

公共答案(列出答案){
返回answerRepository.saveAll(答案)
.flatMap(答案->{
返回问题库
.findById(answer.getQuestionId())
.flatMap(问题->{
question.getAnswers().removeIf(ans->Objects.equals(ans.getId(),answer.getId());
question.getAnswers().add(答案);
返回questionRepository.save(问题);
})
.然后返回(回答);
});
}
public Flux<Answer> createAnswers(List<Answer> answers) {
        return answerRepository.saveAll(answers)
                .flatMap(answer -> {
                    return questionRepository
                            .findById(answer.getQuestionId())
                            .flatMap(question -> {
                                question.getAnswers().removeIf(ans -> Objects.equals(ans.getId(), answer.getId()));
                                question.getAnswers().add(answer);
                                return questionRepository.save(question);
                            })
                            .thenReturn(answer);
                });
    }