首页 > 解决方案 > Springboot webflux reactor 从 mongoDB 中删除项目

问题描述

我使用springboot + mongodb,我是webflux的初学者。我为 CRUD 编写代码。当我在控制器中访问删除 ID 时,代码不起作用,因为计数总是返回 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-bootspring-webflux

解决方案


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));
         }));
    

推荐阅读