上一篇 12个MongoDB的可视化工具,以及shell 操作脚本练习
在使用SpringData MongoDB时,MongoDbRepository 有如下可利用的 CRUD 的方法
一、insert和save的区别
都是添加保存操作,区别在于当传入主键(不必要)添加时,insert 有插入数据的含义,当有主键冲突时,会报错,而save操作是替换的意思,会覆盖当前主键的数据
二、关于主键是Long类型和String类型的问题
@Accessors(chain = true)
@Data
@Document(collection = "article_info")
public class Article {
@Id
private String id;
@Field("title")
private String title;
@Field("url")
private String url;
@Field("author")
private String author;
@Field("tags")
private List<String> tags;
@Field("visit_count")
private Long visitCount;
@Field("add_time")
private Date addTime;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Document(collection = "person")
public class Person {
@Id
private Long id;
private String firstname;
private String lastname;
private LocalDate birthday;
}
1.1 主键为String时,添加时,主键可以指定也可以不指定,Mongo库会自定生成24位的Hash主键,或者你所指定的主键值
1.2 主键为Long类型时,必须给给主键赋值才能添加(Mongo shell操作可以不必须,会自动hash主键值)
1.3 两种类型在Mongo库的存储格式也是不同的
{
"_id": NumberLong("5"),
"firstname": "李",
"lastname": "啸",
"birthday": ISODate("1975-03-04T16:00:00.000Z"),
"_class": "demo3.model.Person"
}
{
"_id": ObjectId("5d285daff2067e140813dfb4"), // 这里主键会自动加下划线
"title": "Q2SNdr7",
"url": "http://Wn29gk",
"author": "ut minim magna",
"visit_count": NumberLong("91559171"), // 注意这里其实是忽略驼峰式命名的
"add_time": ISODate("1993-03-25T00:00:00.000Z"), // 日期类型存在形式,返回对象时,会格式转换为 1993-03-25
"_class": "demo3.model.Article" // 会添加 _class字段
}