gpt4 book ai didi

mongodb - 无法从 Mongo 记录 [mgo] :golang 的结构接口(interface)上仅更新一个值

转载 作者:IT王子 更新时间:2023-10-29 02:21:06 25 4
gpt4 key购买 nike

基本上,我想通过给定完整结构接口(interface)作为collection.Upsert(selector,change)中的更改参数更新mongodb文档中的一个值。我们如何在不将其他值丢失为空的情况下做到这一点。 Other(type,category.rerportby,createon,info) values should be keep on existing values only update plantlocation 值到 PLANT07BAR)

NOTE: I want use completely Service Notification Struct Object for do this.

DatabaseName:WO 
CollectionName:SERVICE_NOTIFICATIONS

封装模型

//models.ServiceNotification
type ServiceNotification struct {
NotificationNo string `json:"notification_no" bson:"notification_no"`
Type string `json:"type" bson:"type"`
Category string `json:"category" bson:"category"`
Plant string `json:"plant" bson:"plant"`
Location string `json:"location" bson:"location"`
ReportedBy string `json:"reportedby" bson:"reportedby"`
Info map[string]interface{}`json:"info" bson:"info"`
SAPInfo SAPNotificationInfo `json:"sapinfo" bson:"sapinfo"`
CreateOn string `json:"createon" bson:"createon"`
UpdateOn string `json:"updateon" bson:"updateon"`
}

package main

func main(){

input := models.ServiceNotification{
NotificationNo:000120,
Plant:"Plant07",
Location:"BAR",
}
Change_ServiceNotification(input)

}

I want update plant and location by given complete struct interface to the mongo Upsert function. because I want to decide dynamically what should update . But when I update plant and location other values going to be LOST. in mongo record.

func Change_ServiceNotification(notification models.ServiceNotification) error {
session, err := commons.GetMongoSession()
if err != nil {
return errors.New("Cannot create mongodb session" + err.Error())
}
defer session.Close()
var col = session.DB(WO).C(SERVICE_NOTIFICATIONS)

selector := bson.M{"notification_no": notification.NotificationNo}

_, err = col.Upsert(selector, notification)
if err != nil {
errMsg := "Cannot update service notification " + err.Error()
return errors.New(errMsg)
}
return nil
}

感谢您的帮助

提前致谢

最佳答案

你不能这样做,但你可以使用 MongoDB 的 $set 运算符(跳过错误检查):

input := Bson.M{
"$set": bson.M{
"plant": "Plant07",
// Further fields here...
}
}
selector := bson.M{"notification_no": notification.NotificationNo}
col.Upsert(selector, input)

这将仅更新提供的字段。

关于mongodb - 无法从 Mongo 记录 [mgo] :golang 的结构接口(interface)上仅更新一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49293566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com