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因此推薦第一種標籤方式.