我正在嘗試使用 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根本不發送字段;對于結構,該字段將以其零值發送(如您所見)。

慕雪6442864
TA貢獻1812條經驗 獲得超5個贊
如果設置了文檔_id,mongodb將在插入過程中使用該_id作為文檔,并且不會生成。您必須忽略它,或者使用primitive.NewObjectID()手動設置它。
- 2 回答
- 0 關注
- 163 瀏覽
添加回答
舉報
0/150
提交
取消