我正在使用 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")
}
- 1 回答
- 0 關注
- 152 瀏覽
添加回答
舉報
0/150
提交
取消