仅通过有效负载更新

我正在使用 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"`

}

更新正在工作,但如果我没有发送所有参数,例如只发送一个字段,其余字段将更新为,只是它是一个空字符串“”


有什么办法我只能更新请求有效负载上指定的字段。


呼如林
浏览 148回答 2
2回答

蝴蝶不菲

您必须在结构上指定 omitemptytype 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.PayloadUpdateProfileerr := c.Bind(&payload)然后转换它var payloadInterface map[string]interface{}    inrecPayload, _ := json.Marshal(payload)    json.Unmarshal(inrec, &payloadInterface)UpdateMethod(ctx, filter, payloadInterface)

呼唤远方

你可以这样做:    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 更新包装函数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go