Spring Data Mongo-更新多个记录

时间:2019-05-16 13:51:34

标签: java spring spring-data-mongodb

我需要更新多个记录。我不能按条件执行批量更新查询,因为我们有一个规则,即对于每个数据库更改,我们都必须向消息代理发送消息。因此,我需要一个一个地更新实体

我使用Spring Data Repository。我可以通过发出可分页的请求并更新页面中的元素来做到这一点。

https://www.baeldung.com/spring-data-repositories

@Service
class MyEntityService {
    MyEntityRepository myEntityRepository; // extends PagingAndSortingRepository<MyEntity, ObjectId>

    updateMultipleEntities(UpdateRules updateRules) {
        Criteria criteria = buildCriteria(updateRules);
        long totalrecords = myEntityRepository.count(criteria);
        long totalUpdateCound = 0;

        // LET US ASSUME THAT NUMBER OF RECORDS DOES NOT CHANGE

        while (totalUpdateCound < totalrecords) {
            Page page = myEntityRepository.findAll(buildPageble(totalUpdateCound, criteria));
            processElementsFromPage(page);
        }
    }
}

另一种解决方案是流式传输所有元素并对其进行更新。看起来更容易。

@Service
class MyEntityService {
    MyEntityRepository myEntityRepository; // extends CrudRepository<MyEntity, ObjectId>

    updateMultipleEntities(UpdateRules updateRules) {
        Criteria criteria = buildCriteria(updateRules);

        // LET US ASSUME THAT NUMBER OF RECORDS DOES NOT CHANGE
        myEntityRepository.streamAll(criteria).forEach(element -> processElement(element, updateRules));

    }
}

使用streamAll(criteria)的解决方案是否有缺点?据我了解,如果需要在UI上进行分页,则使用可分页的请求会很有用。但是,如果我需要一个一个地处理元素的情况呢?

更新

http://knes1.github.io/blog/2015/2015-10-19-streaming-mysql-results-using-java8-streams-and-spring-data.html

示例为什么流式传输结果可以提高性能。但是,它仅显示只读情况。

0 个答案:

没有答案
相关问题