MongoDbRepository的常用AP操作和易错点

我就是我 2021-12-12 17:35 136阅读 0赞

上一篇 12个MongoDB的可视化工具,以及shell 操作脚本练习

在使用SpringData MongoDB时,MongoDbRepository 有如下可利用的 CRUD 的方法

在这里插入图片描述

一、insert和save的区别

都是添加保存操作,区别在于当传入主键(不必要)添加时,insert 有插入数据的含义,当有主键冲突时,会报错,而save操作是替换的意思,会覆盖当前主键的数据

二、关于主键是Long类型和String类型的问题

  1. @Accessors(chain = true)
  2. @Data
  3. @Document(collection = "article_info")
  4. public class Article {
  5. @Id
  6. private String id;
  7. @Field("title")
  8. private String title;
  9. @Field("url")
  10. private String url;
  11. @Field("author")
  12. private String author;
  13. @Field("tags")
  14. private List<String> tags;
  15. @Field("visit_count")
  16. private Long visitCount;
  17. @Field("add_time")
  18. private Date addTime;
  19. }
  20. @Data
  21. @NoArgsConstructor
  22. @AllArgsConstructor
  23. @Accessors(chain = true)
  24. @Document(collection = "person")
  25. public class Person {
  26. @Id
  27. private Long id;
  28. private String firstname;
  29. private String lastname;
  30. private LocalDate birthday;
  31. }

1.1 主键为String时,添加时,主键可以指定也可以不指定,Mongo库会自定生成24位的Hash主键,或者你所指定的主键值

1.2 主键为Long类型时,必须给给主键赋值才能添加(Mongo shell操作可以不必须,会自动hash主键值)

1.3 两种类型在Mongo库的存储格式也是不同的

  1. {
  2. "_id": NumberLong("5"),
  3. "firstname": "李",
  4. "lastname": "啸",
  5. "birthday": ISODate("1975-03-04T16:00:00.000Z"),
  6. "_class": "demo3.model.Person"
  7. }
  8. {
  9. "_id": ObjectId("5d285daff2067e140813dfb4"), // 这里主键会自动加下划线
  10. "title": "Q2SNdr7",
  11. "url": "http://Wn29gk",
  12. "author": "ut minim magna",
  13. "visit_count": NumberLong("91559171"), // 注意这里其实是忽略驼峰式命名的
  14. "add_time": ISODate("1993-03-25T00:00:00.000Z"), // 日期类型存在形式,返回对象时,会格式转换为 1993-03-25
  15. "_class": "demo3.model.Article" // 会添加 _class字段
  16. }

三、还有时间格式问题,注释中有提到

四、还有驼峰式命名,也会自动转换的

发表评论

表情:
评论列表 (有 0 条评论,136人围观)

还没有评论,来说两句吧...

相关阅读