【问题标题】:ReactiveMongoTemplate does not return number of documents removedReactiveMongoTemplate 不返回删除的文档数
【发布时间】:2021-12-29 19:57:48
【问题描述】:

我有这个实现,可以使用 ReactiveMongoTemplate 根据一些 id 删除文档。我正在尝试获取受影响文档列表的大小,但它始终返回 0,并且由于它是被动的,我不确定如何获取删除的记录数

@Override
public int deleteMongoDataForGivenId(Long id) {
     int deletedRecords = 0;
     Query query = new Query();
     query.addCriteria(where("id").is(id));

     Flux<Object> deletedDocs = reactiveMongoTemplate.findAllAndRemove(query, Object.class, "SomeCollection");

     if(!deletedDocs.collectList().block().isEmpty()) {
          List<Object> listOfRecords = deletedDocs.collectList().block();
          deletedRecords = listOfRecords.size();
     }
}

【问题讨论】:

    标签: java spring mongodb spring-boot azure-cosmosdb


    【解决方案1】:

    反应式的做法是返回Mono&lt;Long&gt;,而不是将单声道阻塞并解压成longint

    public Mono<Long> deleteMongoDataForGivenId(Long id) {
        Query query = new Query();
        query.addCriteria(where("id").is(id));
    
        return reactiveMongoTemplate
                .findAllAndRemove(query, MyDocument.class, "SomeCollection")
                .count();
    }
    

    必须使用阻塞方法违背了反应式编程的目的,但如果你真的别无选择,你可以这样做:

    public Long deleteMongoDataForGivenId(Long id) {
        Query query = new Query();
        query.addCriteria(where("id").is(id));
    
        return reactiveMongoTemplate
                .findAllAndRemove(query, MyDocument.class, "SomeCollection")
                .count()
      
                // Please don't do this!!!
                .share().block();
    }
    

    【讨论】:

      猜你喜欢
      • 2018-04-26
      • 1970-01-01
      • 2019-12-13
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多