MongoDB的批量查询条件进行批量更新数据

  今天遇到这样一个场景:在Java中批量更新MongoDB数据,不过每次更新的条件有不同,那如何有效地进行更新操做呢?数据库

       刚开始的时候,我是想到循环批量更新操做,即每一种查询条件进行一次批量更新过程,这样的思路就是多个查询条件就须要进行屡次的批量更新,带来的弊端是跟数据库的链接交互太频繁了,消耗的时间都浪费在这些过程当中了;那么今天咱们能够经过另一种方式来避免这种负面影响,只须要和数据库创建一次链接便可完成批量条件批量更新。spa

   (一)总体思路code

  一、首先,将须要更新的数据存在一个List集合中对象

  二、而后,经过MongoTemplate的bulkOps方法返回的对象进行批量查询条件进行批量更新数据blog

  (二)逻辑代码it

MongoTemplate mongoTemplate = new MongoTemplate (); String collectionName = "testCollection"; List<Object> updateEntityList = new ArrayList<>(); List<Pair<Query, Update>> updateList = new ArrayList<>(); BulkOperations operations = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, collectionName); updateEntityList .forEach(data -> { Query query = new Query(); // 须要根据具体的业务场景来添加查询条件
            Update update = new Update(); // 须要根据具体的业务场景经过newEntityList最新数据更新oldEntityList的某些数据
 update.set(key1, value1); update.set(key2, value2); update.set(key3, value3); Pair<Query, Update> updatePair = Pair.of(query, update); updateList.add(updatePair); }); operations.updateMulti(updateList); BulkWriteResult result = operations.execute();

  (三)小结io

  这里主要用到了MongoDB的bulkOps方法,能够适用于不一样的条件下批量操做。class

 

------20200113勉test