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" : [ ] }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值