Morphia 刪除、增加mongodb內嵌陣列元素
阿新 • • 發佈:2018-12-24
一、陣列元素是引用物件
1、增加:
文件格式如下:
{ "_id" : "123", "members" : [ ] }
想要在members陣列中新增一個DBRef引用,結果如下:
{ "_id" : "123", "members" : [ DBRef("memberInfo", "500001") ] }
java程式碼:
UpdateOperations<Follow> updateOperations = this.updates().push("members", memberInfo); UpdateResults updateResults = this.ds() .update( this.q().filter("uid", uid), updateOperations, true ); int updatedCount = updateResults.getUpdatedCount(); return (0 != updatedCount ? updatedCount : updateResults.getInsertedCount());
updateOperations 使用push方法,引數members是文件中的陣列名稱,memberInfo是DBRef引用物件。
這裡的引用物件memberInfo可以是整個物件,比如通過id查詢獲得:
MemberInfo memberInfo = memberInfoDao.findOneBy("uid", followedUid);
也可以只對物件的Id賦值即可:
MemberInfo memberInfo = new MemberInfo(); memberInfo.setUid(followedUid);
這兩種方法效果一致,使用後面只給物件的Id賦值的方式更簡單,並且不用查詢資料庫。
update()的第三個引數為true時,如果沒有則新增;false時,沒有則不新增。
通過以上方法即可完成新增陣列的一個引用物件,檢視mongodb:
{ "_id" : "123", "members" : [ DBRef("memberInfo", "500001") ] }
滿足要求。
2、刪除
想把members陣列中的某個元素刪除掉,比如 "500001"這個DBRef引用元素
{ "_id" : "123", "members" : [ DBRef("memberInfo", "500001") ] }
刪除之後結果如下:
java程式碼:{ "_id" : "123", "members" : [ ] }
MemberInfo memberInfo = new MemberInfo();
memberInfo.setUid(followedUid);
UpdateOperations<Follow> updateOperations = this.updates().removeAll("members", memberInfo);
return this.ds()
.update(
this.q().filter("uid", uid),
updateOperations,
false
).getUpdatedCount();
updateOperations 使用removeAll方法,引數members是文件中的陣列名稱,memberInfo是DBRef引用物件。
通過以上方法即可完成刪除陣列的一個引用物件,檢視mongodb:
{ "_id" : "123", "members" : [ ] }