一、新建实体类
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "user_info")
public class UserInfo {
@Id
private String id;
private String name;
private List<Like> likes;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class Like{
private String code;
private String name;
}
}
二、基本使用方法
1:普通新增修改
@RequestMapping(value = "add")
public ResponseMessage add(){
List<UserInfo.Like> likes_1 = new ArrayList<>();
UserInfo.Like like_1 = new UserInfo.Like();
like_1.setCode("PLAY");
like_1.setName("玩耍");
likes_1.add(like_1);
UserInfo.Like like_2 = new UserInfo.Like();
like_2.setCode("RUN");
like_2.setName("跑步");
likes_1.add(like_2);
UserInfo userInfo = new UserInfo();
userInfo.setId("101");
userInfo.setName("小明");
userInfo.setLikes(likes_1);
userInfoService.save(userInfo);
List<UserInfo.Like> likes_2 = new ArrayList<>();
UserInfo.Like like_2_1 = new UserInfo.Like();
like_2_1.setCode("PLAY");
like_2_1.setName("玩耍");
likes_2.add(like_2_1);
UserInfo.Like like_2_2 = new UserInfo.Like();
like_2_2.setCode("SLEEP");
like_2_2.setName("睡觉");
likes_2.add(like_2_2);
UserInfo userInfo2 = new UserInfo();
userInfo2.setId("100");
userInfo2.setName("小明");
userInfo2.setLikes(likes_2);
userInfoService.save(userInfo2);
return new ResponseMessage();
}
2:普通字段模糊查询或者精确匹配
@RequestMapping(value = "query")
public Object query(){
/*String search = "SLEEP";
Pattern pattern = Pattern.compile("^.*" + search + ".*$" , Pattern.CASE_INSENSITIVE);
Query query = new Query(Criteria.where("likes.code").is("PLAY"));
Query query = new Query(new Criteria().orOperator(Criteria.where("likes.code").regex(pattern),(Criteria.where("likes.code").regex("^.*RUN.*$"))));*/
Query query = new Query(Criteria.where("likes.code").regex("^.*PLAY.*$"));
return userInfoService.query(query);
}
3:按条件进行精确字段更新
@RequestMapping(value = "update")
public Object update(){
String search = "PLAY";
Pattern pattern = Pattern.compile("^.*" + search + ".*$" , Pattern.CASE_INSENSITIVE);
Query query = new Query();
query.addCriteria(Criteria.where("likes.code").is(search));
Update update = new Update();
update.set("name","小明改变");
update.set("likes.$.name","随便耍啊");
UserInfo.Like like_2_3 = new UserInfo.Like();
like_2_3.setCode("PLAY");
like_2_3.setName("玩耍");
// addToSet如果数据已经存在,则不做任何操作,而push会插入一条一样的数据 update.push("likes", loc);
update.addToSet("likes", like_2_3);
userInfoService.modify(query,update);
return null;
}
来源:oschina
链接:https://my.oschina.net/fellowtraveler/blog/3178031