@Autowired
MongoTemplate mongoTemplate;
@Test
public void findAndModify(){
Criteria c = Criteria.where("userid").is("1001");
Query query = new Query(c);
Update update = new Update();
update.set("nickname","秦始皇");
mongoTemplate.findAndModify(query,update,Comment.class);
}
@Test
public void findAndRemove(){
Criteria c = Criteria.where("userid").is("1001");
Query query = new Query(c);
mongoTemplate.remove(query,Comment.class);
}
@Test
public void findOne(){
Criteria c = Criteria.where("userid").is("1003");
Query query = new Query(c);
Comment one = mongoTemplate.findOne(query, Comment.class);
System.out.println(one);
}
@Test
public void findMany(){
Criteria c = Criteria.where("userid").is("1003");
Query query = new Query(c);
List<Comment> comments = mongoTemplate.find(query, Comment.class);
System.out.println(comments);
}
@Test
public void drop(){
mongoTemplate.dropCollection(Comment.class.getSimpleName());
}
@Test
public void insert(){
Comment comment=new Comment();
comment.setArticleid("666666");
comment.setId("60941353d1493938cc6a1336");
comment.setContent("六王毕四海一");
comment.setCreatedatetime(LocalDateTime.now());
comment.setUserid("1002");
comment.setNickname("秦始皇");
comment.setState("1");
comment.setLikenum(0);
comment.setReplynum(0);
mongoTemplate.save(comment);
}
@Test
public void insertMany(){
List list = new ArrayList();
for (int i = 0; i <3 ; i++) {
Comment comment=new Comment();
comment.setArticleid("666666"+i);
comment.setContent("六王毕四海一"+i);
comment.setCreatedatetime(LocalDateTime.now());
comment.setUserid("1002"+i);
comment.setNickname("秦始皇"+i);
comment.setState("1"+i);
comment.setLikenum(0);
comment.setReplynum(0);
list.add(comment);
}
mongoTemplate.insert(list,Comment.class.getSimpleName().toLowerCase());
}
总结:findAndModify只会修改你设置的条件,不会修改所有字段。save方法带id,若id存在,则会修改而不插入,不带id或id不存在会插入。
@DBRef
private User user;
@DBRef
private List userList;
如果不加@DBRef,就保存整个User 文档信息,如果加上了,只保存User 文档的id。
比如User 文档里面如果保存了整个User 表的信息,User 文档内容太多了,应该只保存User 文档的id。
如果加上了@DBRef,保存User 表不会保存User 表,User 表文档应该先单独保存,然后保存User 表。