天天看點

MongoDbRepository的常用AP操作和易錯點

上一篇 ​​12個MongoDB的可視化工具,以及shell 操作腳本練習​​

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

一、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字段
}      

三、還有時間格式問題,注釋中有提到

四、還有駝峰式命名,也會自動轉換的