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

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

如何處理重復唯一索引錯誤?

如何處理重復唯一索引錯誤?

Go
飲歌長嘯 2023-08-14 16:45:00
我正在使用 MongoDB。將數據添加到集合的代碼:  type User struct {  Firstname        string             `json:"firstname" bson:"firstname"`  Lastname         *string            `json:"lastname,omitempty" bson:"lastname"`  Username         string             `json:"username" bson:"username"`  RegistrationDate primitive.DateTime `json:"registrationDate" bson:"registrationData"`  LastLogin        primitive.DateTime `json:"lastLogin" bson:"lastLogin"`}var client *mongo.Clientfunc AddUser(response http.ResponseWriter, request *http.Request) {  collection := client.Database("hattip").Collection("user")  var user User  _ = json.NewDecoder(request.Body).Decode(&user)  insertResult, err := collection.InsertOne(context.TODO(), user)  if err != nil {    // here i need to get the kind of error.    fmt.Println("Error on inserting new user", err)    response.WriteHeader(http.StatusPreconditionFailed)  } else {    fmt.Println(insertResult.InsertedID)    response.WriteHeader(http.StatusCreated)  }}func main() {  client = GetClient()  err := client.Ping(context.Background(), readpref.Primary())  if err != nil {    log.Fatal("Couldn't connect to the database", err)  } else {    log.Println("Connected!")  }  router := mux.NewRouter()  router.HandleFunc("/person", AddUser).Methods("POST")  err = http.ListenAndServe("127.0.0.1:8080", router)  if err == nil {    fmt.Println("Server is listening...")  } else {    fmt.Println(err.Error())  }}func GetClient() *mongo.Client {  clientOptions := options.Client().ApplyURI("mongodb://127.0.0.1:27017")  client, err := mongo.NewClient(clientOptions)  if err != nil {    log.Fatal(err)  }  err = client.Connect(context.Background())  if err != nil {    log.Fatal(err)  }  return client}
查看完整描述

1 回答

?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

如果我添加數據庫中已存在的用戶名的記錄,我會得到 -


插入新用戶時出錯多個寫入錯誤:[{寫入錯誤:[{E11000重復鍵錯誤集合:hattip.user索引:username_unique dup key:{username:“dd”}}]},{}]


行中字段中帶有fmt.Println("Error on inserting new user", err)字符串的記錄已經存在,并且該字段是唯一索引。ddusernameusername


我想確保該錯誤是確切的 E11000 錯誤(關鍵錯誤的重復集合)。


到目前為止,我err與唯一字段重復時出現的整個錯誤字符串進行了比較,但它是完全錯誤的。是否有辦法從err對象獲取錯誤代碼,或者有其他方法來解決這個問題?


另外,我找到了mgo包,但為了正確使用它,我必須學習它,重寫當前代碼等等,但老實說,它看起來不錯:


if mgo.IsDup(err) {

    err = errors.New("Duplicate name exists")

}


查看完整回答
反對 回復 2023-08-14
  • 1 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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