由于公司用mongodb存储树状菜单,要对里面的子节点进行crud操作
数据结构如下
要对child内的数据进行新增修改
比如往categoryDocmentList.child.child 名称为 '二级分类s3331'的sign添加一个数组元素
Query query = new Query();
query.addCriteria(Criteria.where("_id").is("6132dd9b0bb4b1261b244932"));//查询指定的文档
Update update = new Update();
BasicDBObject basicDBObject = new BasicDBObject();
basicDBObject.append("id","11");
basicDBObject.append("name","sdss");
update.filterArray(Criteria.where("child.child.name").is("二级分类s3331")); //指定刷选条件
update.push("categoryDocmentList.$[].child.$[child].child.$[].sign",basicDBObject); //使用push添加元素
UpdateResult updateResult1 = mongoTemplate.updateFirst(query, update, User.class);
其他的修改操作就用
update.set()
关键在于用filterArray 指点刷选列,并且在update()里的表达式$[]写法中指定刷选列
百度了很多写法,都没有结果,这是中和了多种博客中我认为目前最简单的一种