首頁  >  文章  >  後端開發  >  MongoDB GO 驅動程式覆蓋現有數據

MongoDB GO 驅動程式覆蓋現有數據

WBOY
WBOY轉載
2024-02-08 23:00:35853瀏覽

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

php小編香蕉帶來了MongoDB GO驅動程式的全新覆蓋現有資料的介紹。作為一種流行的NoSQL資料庫,MongoDB在開發人員中越來越受歡迎。這個新的驅動程式提供了靈活、高效的方法來操作MongoDB中的資料。它支援各種查詢和更新操作,同時還提供了高級功能,如事務處理和資料聚合。透過使用這個驅動程序,開發人員可以輕鬆地在GO專案中與MongoDB進行交互,實現快速開發和高效能。無論是新項目還是現有項目,這個驅動程式都能為開發人員提供更好的資料操作體驗。無論您是初學者還是有經驗的開發人員,這個驅動程式都將是您的最佳選擇。

問題內容

我正在使用 go-fiber 並使用 mongodb mongodb go 驅動程式。 我只想更新正文給的字段。但它正在覆蓋數據。

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)

}

如果這是驅動程式的工作原理,請告訴我更新文件的更好方法。

解決方法

$set 運算子將覆寫您指定的所有字段,因此您必須選擇性地建立更新語句:

fields:=bson.m{}
if body.name!="" {
   fields["name"]=body.name
}
...
update:=bson.m{"$set":fields}

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

fields:=bson.M{}
add:=func(key,value string) {
   if value!="" {
      fields[key]=value
   }
}
add("name",body.Name)
add("userName",body.UserName)

以上是MongoDB GO 驅動程式覆蓋現有數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除