今天遇到這樣一個場景:在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勉
