【问题标题】:Returning Mono<UpdateResult> with Reactive MongoDB template使用 Reactive MongoDB 模板返回 Mono<UpdateResult>
【发布时间】:2019-07-13 12:17:29
【问题描述】:

我正在尝试在 Spring Boot 中使用 MongoDB 反应模板以反应方式获取 UpdateResult。

问题是更新部分不会执行,因为我没有订阅它,但我真的不知道如何执行这 2 个操作并使用反应范式返回一个值。

这就是我正在尝试的:

@GetMapping("\update")
public Mono<UpdateResult> updateTask(@RequestParam(name="taskId") {
    Mono<UpdateResult> updateResult = mongoReactiveTemplate
            .findById(taskId, Task.class)
            .flatmap(object -> mongoReactiveTemplate.updateFirst(Query.query(... the query), new Update().set("something", Task.class)));

    return updateresult;
}

flatMap updateFirst 不会发生,因为我没有订阅,但我需要返回 UpdateResult,如果我订阅我不确定如何返回该值。

【问题讨论】:

标签: java mongodb spring-boot project-reactor


【解决方案1】:

控制器“订阅”流,因此返回 Mono&lt;UpdateResult&gt; 非常好,并且会按预期工作 - http 客户端将获得序列化的更新结果。

【讨论】:

  • 是的,它订阅了主流,但它也订阅了 flatMap 内的流吗?问题是更新没有执行,控制器一直等待返回很长时间(直到它抛出一个错误,没有得到任何东西)
  • 是的,平面图中的流也被订阅了。 Reactor API 以这种方式构建,通常可以看出您做错了什么;)例如如果你使用 map 代替 flatmap,你会得到 Mono&lt;Mono&lt;Result&gt;&gt; 并且内部 Mono 不会被订阅。
猜你喜欢
  • 2016-05-20
  • 1970-01-01
  • 2018-04-24
  • 2019-10-27
  • 2020-12-28
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多