一、数组元素是引用对象
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" : [ ] }