mongodb插入文檔時不傳ObjectId

type BookExt struct {
    ID       bson.ObjectId `bson:"_id"`
    Title    string        `bson:"title"`
    SubTitle string        `bson:"subTitle"`
    Author   string        `bson:"author"`
}

以上結構體,在經過此結構體對象做爲參數傳入Insert插入文檔時,必須經過bson.NewObjectId建立ID,以下代碼所示:mongodb

aBook := BookExt{
    ID:bson.NewObjectId(),
    Title:    "Go",
    SubTitle: "Go",
    Author:   "GoBj",
}   
c.Insert(&aBook)

若是不想本身調用bson.NewObjectId,想讓mongodb自動生成ID怎麼辦呢?有兩種辦法spa

1.使用bson.M構建code

在使用mongodb插入文檔傳參的時候,能夠用bson.M構建參數傳入Insert對象

c.Insert(bson.M{
    "title":    "Go",
    "subTitle": "Go",
    "author":   "GoBj",
})

2.在結構體中,使用tag標籤blog

type BookExt struct {
    ID       bson.ObjectId `bson:"_id,omitempty"` 
    Title    string        `bson:"title"`
    SubTitle string        `bson:"subTitle"`
    Author   string        `bson:"author"`
}

使用以上 `bson:"_id,omitempty"`標籤,意思是當傳入的_id是空時,將忽略該字段,因此當插入到mongodb時,發現此字段爲空,mongodb將自動生成_id文檔

還有一種標籤方式也能夠,以下:string

type BookExt struct {
    ID       bson.ObjectId `bson:"-"`
    Title    string        `bson:"title"`
    SubTitle string        `bson:"subTitle"`
    Author   string        `bson:"author"`
}
`bson:"-"`表示徹底忽略此字段,可是也帶來個問題,就是從mongodb查詢時,使用此結構體做爲返回參數,也會忽略此字段,結果中沒有讀出_id因此推薦第一種標籤方式.
相關文章
相關標籤/搜索