我正在创建RESTful API,并且正在创建更新功能。我使用FindOneAndUpdate,它实际上并没有更新数据库。
我尝试了很多事情,但是我对这门语言还不陌生,所以我有点迷茫。
func UpdateCompanyEndpoint(response http.ResponseWriter, request *http.Request) {
response.Header().Set("content-type", "application/json")
params := mux.Vars(request)
name, _ := params["name"]
var company Company
_ = json.NewDecoder(request.Body).Decode(&company)
collection := client.Database("RESTful").Collection("companies")
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
filter := bson.D{{"name", name}}
update := bson.D{{"$set", bson.D{{"application", company.Application}}}}
err := collection.FindOneAndUpdate(
ctx,
filter,
update).Decode(&company)
if err == nil {
response.WriteHeader(http.StatusInternalServerError)
return
}
json.NewEncoder(response).Encode(company)
}
[
{
"name": "Test1",
"application": "Test1"
},
{
"name": "Test2",
"application": "Test2"
},
{
"name": "Test3",
"application": "Test3"
}
]
这是当前数据库。当我调用该函数时,它返回:
{
"name": "Test2",
"application": "Test2update"
}
但是数据库保持不变。
答案 0 :(得分:1)
您的问题出在这个区块中:
if err == nil {
response.WriteHeader(http.StatusInternalServerError)
return
}
json.NewEncoder(response).Encode(company)
请注意,您发送的StatusInternalServerError
是err
是nil
,并且收到err != nil
时发布的响应,因此您的情况发生了一些错误。