从MongoDB反应式查询获得的List属性添加到Flux的每个元素中

时间:2019-12-10 12:30:20

标签: mongodb mono flux reactive

第一次发布时,我正在Spring学习反应式流,并且遇到了以下问题。

我为Workspace类有一个mongo存储库,而对于Model类有另一个存储库。

当我查询所有工作空间时,我得到一个Flux,我希望将此通量中的每个元素转换为一个名为WorkspaceDTO的新类,并向modelsRepository查询以检索所有具有该属性的模型workspaceName等于我的工作空间名称,然后将此结果添加到WorkspaceDTO的一个List属性中。

我一直在尝试一些事情,但是还没有找到解决方法,有什么建议吗?

1 个答案:

答案 0 :(得分:0)

最终设法使用以下代码:

 Flux<Workspace> workspaces = repository.findAll();

        return workspaces
                .map(ws -> {
                    Mono<List<Model>> workspaceModels = modelRepository.findByWorkspaceName(ws.getName()).collectList();
                    return Mono.zip(Mono.just(ws),workspaceModels)
                            .map(t -> new WorkspaceDTO(t.getT1(),t.getT2()));

                })
                .flatMap(Flux::concat) //This operation transform a Flux<Mono<WorkspaceDTO>> into Flux<WorkspaceDTO>
                .log();