dongqing4774 2019-09-11 09:26
浏览 61

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

I am creating a RESTful API and am in the process of creating an update function. I use FindOneAndUpdate, and it doesn't actually update the database.

I have tried many things, but I'm fairly new to the language so I'm a bit lost.

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"
    }
]

This is the current database. When I call the function, it returns:

{
    "name": "Test2",
    "application": "Test2update"
}

but the database remains unchanged.

  • 写回答

1条回答 默认 最新

  • dongying3744 2019-09-11 09:30
    关注

    Your problem is in this block:

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

    Notice carefully, you are sending StatusInternalServerError is err is nil, and you get the response you posted when err != nil, so some error is occuring in your case.

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)