引子
我在项目中用的是spring mongodb,今天遇到了一个修改内嵌arraylist里面某个对象的字段报出的问题,下面和大家分享一下正确修改mongodb内嵌list里面字段值的方式,同时也给自己做一份笔记。
场景描述
数据结构如下:
如上图数据结构,我要修改discussList里面某一个对象(数据时用java对象加进去的,这里先称它为对象)的content字段。
解决方式
1、原生mongodb修改语句:
db.Yues.update({"discussList._id":"d_ef21b0bf-9bd4-4516-8217-2a9caab8b9e0"}, { $set : {"discussList.$.content":"内容" }})
1、spring mongodb修改语句,这里给出的是往replys里面加数据的方式,实际上也没什么大的区别:
public void replyDiscuss(String replyId, ActivityDiscuss discuss){
Query query = Query.query(Criteria.where("discussList._id").is(replyId));
Update update = new Update().push("discussList.$.replys", discuss);
mongoTemplate.updateFirst(query, update, Yues.class);
}
总结
这里关键在于“.$.”。
“discussList. .content”里面的“. .”是找到discussList元素下标的意思。
理解这一点,注意一下以后再遇到类似的问题就可以很好的解决了。