【问题标题】:Springboot webflux reactor delete items from mongoDBSpringboot webflux reactor 从 mongoDB 中删除项目
【发布时间】:2023-03-22 09:40:01
【问题描述】:

我使用springboot + mongodb,我是webflux的初学者。我为 CRUD 编写代码。当我在 Controller 中访问删除 ID 时,代码不起作用,因为 count 总是返回 0。有人帮助我吗?

@ApiOperation(value = "Delete multi cities")
@DeleteMapping
public Mono<ResponseEntity<AtomicInteger>> deleteByIds(@RequestBody @NotNull Set<String> ids) {
    AtomicInteger count = new AtomicInteger(0);
    Flux.fromIterable(ids)
                    .flatMap((id) -> {
                        return cityService.findById(id)
                                .flatMap((c) -> {
                                    count.getAndAdd(1);
                                    return cityService.deleteById(c.getId());
                                });
                    });
    log.debug("count = {}", count);
    return Mono.just(ResponseEntity.ok(count));
}

【问题讨论】:

    标签: spring-boot spring-webflux


    【解决方案1】:

    未订阅 Flux 你应该这样尝试

    return Flux.fromIterable(ids)
               .flatMap((id) -> {
                return cityService.findById(id)
                                  .flatMap((c) -> {
                                   count.getAndAdd(1);
                                   return cityService.deleteById(c.getId());
                                  });
                        })
              .then(Mono.defer(() -> {
               log.debug("count = {}", count);
              return Mono.just(ResponseEntity.ok(count));
             }));
        
    

    【讨论】:

    • 您能帮我解释一下吗?我不清楚。
    • 正如我之前所说,您的 Flux 已发布但尚未订阅。 ` Flux.fromIterable(ids) .flatMap((id) -> { return cityService.findById(id) .flatMap((c) -> { count.getAndAdd(1); return cityService.deleteById(c.getId()) ; }); }); // 这里需要订阅 ` 当你返回 Mono 时,在 block 中,控制器只是在你返回时订阅 mono
    猜你喜欢
    • 2013-06-08
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2020-04-28
    • 2015-10-11
    相关资源
    最近更新 更多