亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅通過有效負載更新

僅通過有效負載更新

Go
呼如林 2022-04-26 14:46:33
我正在使用 go 和 echo 制作 rest API,并且正在更新數據。起初我使用 struct 來存儲有效負載,然后對 mongodb 進行更新type updatePayload struct {    FullName    string `json:"fullName" bson:"fullName"`    FirstName   string `json:"firstName" bson:"firstName"`    LastName    string `json:"lastName" bson:"lastName"`    Location    string `json:"location" bson:"location"`    Gender      string `json:"gender" bson:"gender"`    State       string `json:"state" bson:"state"`    Subdistrict string `json:"subdistrict" bson:"subdistrict"`    Address     string `json:"homeAddress" bson:"homeAddress"`    Profession  string `json:"provession" bson:"provession"`    Settings    struct {        Email bool `json:"email" bson:"email"`        SMS   bool `json:"sms" bson:"sms"`        GCM   bool `json:"gcm" bson:"gcm"`    } `json:"settings" bson:"settings"`    Coordinates struct {        Type        string    `json:"type" bson:"type"`        Coordinates []float64 `json:"coordinates" bson:"coordinates"`    } `json:"coordinates" bson:"coordinates"`}更新正在工作,但如果我沒有發送所有參數,例如只發送一個字段,其余字段將更新為,只是它是一個空字符串“”有什么辦法我只能更新請求有效負載上指定的字段。
查看完整描述

2 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

您必須在結構上指定 omitempty


type PayloadUpdateProfile struct {

    FullName    string       `json:"fullName,omitempty" bson:"fullName,omitempty"`

    FirstName   string       `json:"firstName,omitempty" bson:"firstName,omitempty"`

    LastName    string       `json:"lastName,omitempty" bson:"lastName,omitempty"`

}

像往常一樣將有效負載綁定到結構中


var payload profile.PayloadUpdateProfile

err := c.Bind(&payload)

然后轉換它


var payloadInterface map[string]interface{}

    inrecPayload, _ := json.Marshal(payload)


    json.Unmarshal(inrec, &payloadInterface)


UpdateMethod(ctx, filter, payloadInterface)


查看完整回答
反對 回復 2022-04-26
?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

你可以這樣做:


    type updatePayload struct {

    FullName    string `json:"fullName" bson:"fullName"`

    FirstName   string `json:"firstName" bson:"firstName"`

    LastName    string `json:"lastName" bson:"lastName"`

    Location    string `json:"location" bson:"location"`

    Gender      string `json:"gender" bson:"gender"`

    State       string `json:"state" bson:"state"`

    Subdistrict string `json:"subdistrict" bson:"subdistrict"`

    Address     string `json:"homeAddress" bson:"homeAddress"`

    Profession  string `json:"provession" bson:"provession"`

    Settings    struct {

        Email bool `json:"email" bson:"email"`

        SMS   bool `json:"sms" bson:"sms"`

        GCM   bool `json:"gcm" bson:"gcm"`

    } `json:"settings" bson:"settings"`

    Coordinates struct {

        Type        string    `json:"type" bson:"type"`

        Coordinates []float64 `json:"coordinates" bson:"coordinates"`

    } `json:"coordinates" bson:"coordinates"`

}


func (payload *updatePayload) prepareUpdateQuery() (bson.M, error) {

    updateQuery := make(bson.M)

    if len(payload.FirstName) != 0 {

        updateQuery["firstName"] = payload.FirstName

    }


    if len(payload.LastName) != 0 {

        updateQuery["lastName"] = payload.LastName

    }

    // do same like above for other fields 


    updateQ := make(bson.M)

    updateQ["$set"] = updateQuery

    return updateQ, nil

}

在 updatePayload 結構上有方法,在解碼 api 有效負載后,調用此方法并為那些僅具有來自 api 有效負載的數據的字段生成更新查詢。一旦進行更新查詢,將該更新查詢傳遞給 mongodb 更新包裝函數。


查看完整回答
反對 回復 2022-04-26
  • 2 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號