我正在使用 MongoDB。將數(shù)據(jù)添加到集合的代碼: 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()) }}如果我使用數(shù)據(jù)庫(kù)中已經(jīng)存在的用戶名添加記錄,我會(huì)得到 -插入新用戶多個(gè)寫(xiě)入錯(cuò)誤時(shí)出錯(cuò):[{寫(xiě)入錯(cuò)誤:[{E11000 重復(fù)鍵錯(cuò)誤集合:hattip.user 索引:用戶名_唯一重復(fù)鍵:{用戶名:“dd”}}]},{}]在 line字段中fmt.Println("Error on inserting new user", err)帶有字符串的記錄dd已經(jīng)username存在,并且該username字段是唯一索引。我想確定錯(cuò)誤是確切的 E11000 錯(cuò)誤(重復(fù)的關(guān)鍵錯(cuò)誤集合)。到目前為止,我比較err了出現(xiàn)在唯一字段重復(fù)上的整個(gè)錯(cuò)誤字符串,但這是完全錯(cuò)誤的。如果有辦法從err對(duì)象獲取錯(cuò)誤代碼,或者有其他方法可以解決這個(gè)問(wèn)題?另外,我找到mgo了包,但要正確使用它,我必須學(xué)習(xí)它,重寫(xiě)當(dāng)前代碼等等,但老實(shí)說(shuō),它看起來(lái)不錯(cuò):if mgo.IsDup(err) { err = errors.New("Duplicate name exists")}
如何處理重復(fù)的唯一索引錯(cuò)誤?
阿波羅的戰(zhàn)車(chē)
2022-04-26 15:33:11