为什么我的更新函数返回新查询但不更新数据库?

时间:2019-09-11 09:26:08

标签: mongodb rest go crud

我正在创建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"
}

但是数据库保持不变。

1 个答案:

答案 0 :(得分:1)

您的问题出在这个区块中:

if err == nil {
    response.WriteHeader(http.StatusInternalServerError)
    return
}
json.NewEncoder(response).Encode(company)

请注意,您发送的StatusInternalServerErrorerrnil,并且收到err != nil时发布的响应,因此您的情况发生了一些错误。