Spirngboot+Spring Data mongodb(三) 修改操作

新增数据

@Test
public void add(){
    List<BillDetail> details = new ArrayList<>();
    IntStream.range(0,3).parallel().forEach(x->{
        BillDetail billDetail = new BillDetail();
        String suffix = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSSSS"));
        billDetail.setBillNo("0304"+ suffix);
        billDetail.setCity("深圳市"+x);
        billDetail.setProvince("广东省"+x);
        billDetail.setCounty("福田区"+x);
        billDetail.setPrice(100+x);
        billDetail.setSex("男");
        billDetail.setUsername("王小二"+x);
        billDetail.setSpuName(Arrays.asList("品类"+ new Random().nextInt(100),"品类"+new Random().nextInt(100)));
        List<ProductInfo> productInfos = new ArrayList<>();
        IntStream.range(0,3).parallel().forEach(p->{
            ProductInfo productInfo = new ProductInfo();
            productInfo.setPrice(300+p);
            productInfo.setName("可口可乐"+p);
            productInfo.setType("汽水"+p);
            productInfos.add(productInfo);
        });
        billDetail.setProductInfos(productInfos);
        details.add(billDetail);
    });
    mongoTemplate.insertAll(details);
}

updateFirst更新 匹配county为福田的 第一条数据的city为 深圳

 @Test
    public void update1(){
        Criteria city = Criteria.where("county").regex("福田*");
        Query query = Query.query(city);
        Update update = Update.update("city", "深圳市");
        mongoTemplate.updateFirst(query,update,BillDetail.class);
    }

updateMulti更新所有匹配结果

 @Test
    public void update2(){
        Criteria city = Criteria.where("county").regex("福田*");
        Query query = Query.query(city);
        Update update = Update.update("city", "深圳市");
        mongoTemplate.updateMulti(query,update,BillDetail.class);
    }

upsert 单条操作,若query条件匹配,这执行更新匹配的第一条,若无则新增一条记录

public void update3(){
        Criteria city = Criteria.where("county").regex("宝安*");
        Query query = Query.query(city);
        Update update = Update.update("city", "深圳市");
        mongoTemplate.upsert(query,update,BillDetail.class);
    }

 addToSet 数组增加一条记录

 public void update4(){
        Criteria city = Criteria.where("county").regex("福田*");
        Query query = Query.query(city);
        Update update = new Update();
        update.addToSet("spu_name","品类add");
        mongoTemplate.updateFirst(query,update,BillDetail.class);
    }

 addToSet数组新增多条数据

public void update5(){
        Criteria city = Criteria.where("county").regex("福田*");
        Query query = Query.query(city);
        Update update = new Update();
        update.addToSet("spu_name").each(Arrays.asList("品类add","品类add2","品类add3"));
        mongoTemplate.updateFirst(query,update,BillDetail.class);
    }
新增一个category 数组,当数组内存在相同数据时,addToSet不新增,push会直接新增
 public void update6(){
        Criteria city = Criteria.where("county").regex("福田*");
        Query query = Query.query(city);
        Update update = new Update();
        update.push("category").each("spring", "data");
//        update.addToSet("category").each("spring", "data");
        mongoTemplate.updateFirst(query,update,BillDetail.class);
    }

currentDate时间操作

修改updateTime字段时间为当前时间,若updateTime字段不存在,则新增字段,mongodb时间对比北京时间会少8个小时。
 public void update7(){
        Criteria city = Criteria.where("county").regex("福田*");
        Query query = Query.query(city);
        Update update = new Update();
        update.currentDate("updateTime");
        mongoTemplate.updateFirst(query,update,BillDetail.class);
    }

pop 数组集合的头部或尾部删除一个元素

    public void update8(){
        Criteria city = Criteria.where("county").regex("福田*");
        Query query = Query.query(city);
        Update update = new Update();
//        update.pop("spu_name", Update.Position.LAST);
        update.pop("spu_name", Update.Position.FIRST);
        mongoTemplate.updateFirst(query,update,BillDetail.class);
    }

pull删除集合元素

单条匹配,删除spu_name集合中所有 “品类add”
 public void update9(){
        Criteria city = Criteria.where("county").regex("福田*");
        Query query = Query.query(city);
        Update update = new Update();
        update.pull("spu_name","品类add");
        mongoTemplate.updateFirst(query,update,BillDetail.class);
    }
删除数组内  "品类add","品类add2","品类84"多种匹配记录
public void update10(){
        Criteria city = Criteria.where("county").regex("福田*");
        Query query = Query.query(city);
        Update update = new Update();
        update.pullAll("spu_name",new Object[]{"品类add","品类add2","品类84"});
        mongoTemplate.updateFirst(query,update,BillDetail.class);
    }

setOnInsert插入新增

 query条件有匹配文档,则不执行更新操作,query条件没有匹配文档,新增一条 Key-value(sex:女)的文档
 public void update11(){
        Criteria city = Criteria.where("county").regex("宝安*");
        Query query = Query.query(city);
        Update update = new Update();
        update.setOnInsert("sex","女");
        mongoTemplate.upsert(query,update,BillDetail.class);
    }

findAndModify 是否返回更新后的结果

    public void update13(){
        Criteria city = Criteria.where("county").regex("福田*");
        Query query = Query.query(city);
        Update update = new Update();
        update.inc("price",10);
        BillDetail andModify = mongoTemplate.findAndModify(query, update, FindAndModifyOptions.options().returnNew(true), BillDetail.class);
        System.out.println(andModify);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值