1. 程式人生 > >Morphia 刪除、增加mongodb內嵌陣列元素

Morphia 刪除、增加mongodb內嵌陣列元素

一、陣列元素是引用物件

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") ] }

刪除之後結果如下:

{ "_id" : "123", "members" : [ ] }
java程式碼:
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" : [ ] }