SpringBoot作mongodb批量更新

2021-09-24 13:31:08 字數 1936 閱讀 8469

最近有乙個需求,需要從乙個mongodb操作日誌表中取出所有對mongo集合的處理,然後執行操作。簡單來說就是找到之前所有使用者的操作,然後在一張空白集合中再次演繹一遍。因為這些操作基本都不相同即每次修改都是不一樣的,所以從效率上考慮採用批量更新的方法。

參考文章:

原文對批量更新的講述比較細。由於講述的是mongo2.0.0之前版本,而我使用的是2.1.5,故而實施過程中會出現了一些版本相容問題:

mongotemplate.getcollection()返回的型別由之前的dbcollection變成了mongocollection

下面給出修改後的核心**(如有興趣可參考尹吉歡文章 )。

public class batchupdateoptions
public class mongobasedao 

private static int dobatchupdate(mongotemplate mongotemplate, string collname, listoptions, boolean ordered)

command.put("updates", updatelist);

command.put("ordered", ordered);

document document = mongotemplate.getdb().runcommand((bson) command);

system.out.println("doc:"+document);

system.out.println("doc--n:"+document.get("n"));

system.out.println("doc--nmodified:"+document.get("nmodified"));

// n為符合query查詢的記錄總數 因為是根據id進行的查詢, 原則上只要符合查詢的記錄數等於要更新的數量就代表成功

object n = document.get("n");

system.out.println("doc--n--class:"+n.getclass());

if(n.getclass()==integer.class)

return integer.parseint(string.valueof(n));

}}

注意: 這裡對原作者的**進行了修改【聯絡到了原作者,原作者給出的方法】:

將dbobjec型別的command轉換為了bson

執行命令的函式改為了mongotemplate.getdb().runcommand()

mongo官方手冊給出的更新命令的說明:

listlist = new arraylist();

// 注意upsert置為false, 更新過程不做插入

for (map map : aus)

query query = query.query(criteria.where(primarykey).is(map.get("id")));

batchupdateoptions options = new batchupdateoptions(query, update, false, true);

list.add(options);

}int n = mongobasedao.batchupdate(mongotemplate, collectionname, list, true);

boolean res = (n == aus.size());

aus為封裝的所有對mongo進行更新的集合。

Windows上通過Ruby訪問MongoDB

1 安裝ruby。略過。2 更新rubygem gem update system 3 安裝mongodb的drivers gem install mongo 想要在windows上執行該驅動,需要先安裝ruby devkit以便編譯c擴充套件。gem install bsongem install...

Mac下使用HomeBrew安裝MongoDb

1.homebrew的安裝 mac下 首先開啟終端,輸入 ruby e curl insecure fssl 這句話執行完會叫你輸入密碼,輸入你的賬戶密碼即可。2.正常安裝完成會有提示instalation successful。輸入 brew 會彈出你的brew資訊,就算安裝完成了。下面是mong...

Mac 下使用homebrew安裝MongoDB

1 安裝homebrew 終端輸入 usr bin ruby e curl fssl 安裝完成homebrew之後可以通過brew version來檢視當前homebrew版本 2 安裝mongodb 終端輸入 brew install mongodb建立資料儲存目錄 終端輸入 sudo mkdir...