首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB GO驱动程序覆盖现有数据

MongoDB GO驱动程序覆盖现有数据
EN

Stack Overflow用户
提问于 2022-12-02 20:46:54
回答 1查看 19关注 0票数 1

我正在使用GO-FIBERMONGODB MongoDB Go驱动器。我只想更新正文给出的字段。但它正在覆盖数据。

代码语言:javascript
复制
func UpdateOneUser(c *fiber.Ctx) error {
    params := c.Params("id")
    body := new(models.User)
    
    id, err := primitive.ObjectIDFromHex(params)
    if err != nil {
        return c.Status(500).SendString("invalid onjectid")
    }

    if err := c.BodyParser(&body); err != nil {
        return c.Status(400).SendString("invalid body")
    }
    
    filter := bson.M{"_id": id}
    update := bson.M{"$set": bson.M{
        "name": body.Name,
        "username": body.Username,
        "first_name": body.FirstName,
        "last_name": body.LastName,
        "email": body.Email,
        "phone_number": body.PhoneNumber,
        "contry": body.Contry,
        "age": body.Age,
        "child_accounts": body.ChildAccounts,
        "groups": body.Groups,

    }}
    
    result, err := db.User.UpdateOne(context.Background(), filter, update)
    if err != nil {
        return c.Status(500).SendString("user not found")
    }
    fmt.Println(result)

    return c.JSON(body)

}

如果这是驱动程序的工作方式,那么请告诉我一种更新文档的更好方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-12-02 20:51:00

$set运算符将覆盖指定的所有字段,因此必须有选择地构建update语句:

代码语言:javascript
复制
fields:=bson.M{}
if body.Name!="" {
   fields["name"]=body.Name
}
...
update:=bson.M{"$set":fields}

您可以使用一些快捷方式:

代码语言:javascript
复制
fields:=bson.M{}
add:=func(key,value string) {
   if value!="" {
      fields[key]=value
   }
}
add("name",body.Name)
add("userName",body.UserName)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74661282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档