MongoDB的批量查詢條件進行批量更新數據


  今天遇到這樣一個場景:在Java中批量更新MongoDB數據,不過每次更新的條件有不一樣,那如何有效地進行更新操作呢?

       剛開始的時候,我是想到循環批量更新操作,即每一種查詢條件進行一次批量更新過程,這樣的思路就是多個查詢條件就需要進行多次的批量更新,帶來的弊端是跟數據庫的連接交互太頻繁了,消耗的時間都浪費在這些過程中了;那么今天我們可以通過另外一種方式來避免這種負面影響,只需要和數據庫建立一次連接即可完成批量條件批量更新。

   (一)整體思路

  1、首先,將需要更新的數據存在一個List集合中

  2、然后,通過MongoTemplate的bulkOps方法返回的對象進行批量查詢條件進行批量更新數據

  (二)邏輯代碼

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

  (三)小結

  這里主要用到了MongoDB的bulkOps方法,可以適用於不同的條件下批量操作。

 

------20200113勉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM