mongodb - 仅通过有效负载更新
问题描述
我正在使用 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"`
}
更新正在工作,但如果我没有发送所有参数,例如只发送一个字段,其余字段将更新为,只是它是一个空字符串“”
有什么办法我只能更新请求有效负载上指定的字段。
解决方案
您必须在结构上指定 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)
推荐阅读
- arrays - 克隆多维数组
- c++ - 我可以得到一个 char * 到 std::sregex_iterator 匹配 str()
- flutter - 为什么在 Flutter 中将单元测试标记为异步
- python-3.x - 使用 ftb 检查 web python 上文件的可用性
- sql - T-SQL 中未指定 ValueIfNull 的 NZ 函数
- java - 如何仅使用 GPS 使用纬度和经度在设备位置获取天气预报
- react-apollo - 使用 Postman 在 AWS(AppSync、Apollo)中使用 GraphQL 测试服务
- jdbc - Spring Integration JDBC锁失败
- rascal - 删除空行的正则表达式会产生错误的结果
- javascript - 无法管理 Reactjs 上未填写的字段