亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用官方 mongoDB 驅動程序時,ObjectID 自動設置為“0...0”

使用官方 mongoDB 驅動程序時,ObjectID 自動設置為“0...0”

Go
SMILET 2023-07-17 17:08:34
我正在嘗試使用 Go 將用戶條目保存在 MongoDB 數據庫中。用戶應該自動獲得一個ID。我正在使用官方 MongoDB Go 驅動程序。我的資料來源尤其是https://vkt.sh/go-mongodb-driver-cookbook/和https://www.mongodb.com/blog/post/mongodb-go-driver-tutorial。結構看起來像這樣:type User struct {    ID primitive.ObjectID `json:"_id" bson:"_id"`    Fname string `json:"fname" bson:"fname"`    Lname string `json:"lname" bson:"lname"`    Mail string `json:"mail" bson:"mail"`    Password string `json:"password" bson:"password"`    Street string `json:"street" bson:"street"`    Zip string `json:"zip" bson:"zip"`    City string `json:"city" bson:"city"`    Country string `json:"country" bson:"country"`}設置數據庫(連接有效)并注冊用戶(基于r主體中包含用戶的 HTTP 請求):ctx := context.Background()uriDB := "someURI"clientOptions := options.Client().ApplyURI(uriDB)client, err := mongo.Connect(ctx, clientOptions)collection := client.Database("guDB").Collection("users")...var user Usererr := json.NewDecoder(r.Body).Decode(&user)ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)defer cancel()result, err := collection.InsertOne(ctx, user)...當我輸入第一個用戶時,它被添加到集合中,但 ID 如下所示: _id:ObjectID(000000000000000000000000)如果我現在想輸入另一個用戶,我會收到以下錯誤:multiple write errors: [{write errors: [{E11000 duplicate key error collection: guDB.users index: _id_ dup key: { : ObjectId('000000000000000000000000') }}]}, {<nil>}]所以看來 ObjectID 又000000000000000000000000被分配了。我希望每個條目的 ID 自動設置為唯一值。我是否必須手動設置 ID 或者如何為用戶分配唯一的 ID?
查看完整描述

2 回答

?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

您必須在使用 structs 時自行設置對象 ID:

_, err := col.InsertOne(ctx, &Post{

? ? ID:? ? ? ? primitive.NewObjectID(),? ? // <-- this line right here

? ? Title:? ? ?"post",

? ? Tags:? ? ? []string{"mongodb"},

? ? Body:? ? ? `blog post`,

? ? CreatedAt: time.Now(),

})

使用之前的示例bson.M不需要指定 ID,因為它們_id根本不發送字段;對于結構,該字段將以其零值發送(如您所見)。


查看完整回答
反對 回復 2023-07-17
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

如果設置了文檔_id,mongodb將在插入過程中使用該_id作為文檔,并且不會生成。您必須忽略它,或者使用primitive.NewObjectID()手動設置它。



查看完整回答
反對 回復 2023-07-17
  • 2 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號