SpringBoot MongoDB 修改多层嵌套数组不成功问题
set修改多层嵌套数组例子如下
1.对象
@Setter
@Getter
public class Goods {
private String _id;
private LocalDateTime createTime;
private LocalDateTime updateTime;
private String createBy;
private String updateBy;
private List<BlindBox> blindBoxes;
public class BlindBox {
private String identitf;
private String name;
private List<Thing> content;
}
public class Thing{
private Long seq;
private Long money;
}
}
我之前为了修改thing对象中的money进行了一下操作
public void updateBindBoxThing(String id, Long money,Long seq, String identification) {
Update update = new Update();
update.set("blindBoxes.content.$.money", money);
Query query = Query.query(new Criteria().andOperator(Criteria.where("_id").is(id), Criteria.where("blindBoxes.identification").is(identification)));
mongoOperations.updateMulti(query, update, Goods.class);
}
执行结果发现只有部分成功
正确操作 (这里使用了filterArry过滤出符合修改条件的数组,如果不使用此过滤,那么MongoDB只会修改匹配条件的数组的数据第一条即使使用了updateMany)
public void updateBindBoxThing(String id, Long money,Long seq, String identification) {
Update update = new Update();
update.set("blindBoxes.content.$[i].money", money);
update.filterArray("i.seq", seq);
Query query = Query.query(new Criteria().andOperator(Criteria.where("_id").is(id), Criteria.where("blindBoxes.identification").is(identification)));
mongoOperations.updateMulti(query, update, Goods.class);
}
这样就可以修改全部了匹配的数据了
题外话插一句之前对于在数组中.和elemMatch的使用比较混乱不是很知道区别
后来看来官方文档那个
发现只要没有使用not 和 ne 运算 .和elemMatch是一样的效果
|