新增数据
@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);
}