我对Go官方MongoDB感到非常沮丧。 确实没有文档。 我正在尝试更新集合中的多个字段。 通常,所有引用都是最简单且更新一个字段:
update := bson.D{bson.E{"$set", bson.E{"releaseimage", r.ReleaseImage}}}
那个有效。 我尝试了各种方法来扩展它以设置两个字段并获取错误:
update := bson.D{
{"$set",
bson.E{"releaseimage", r.ReleaseImage},
//bson.E{"releasepath", r.ReleasePath},
},
// {"$set",
// bson.E{
// "releasepath", r.ReleasePath}},
}
第一次删除了第一组中的注释。 第二次尝试的语法无效,请删除第二组注释,因为是无效的语法。 我很茫然。 为了继续前进,我正在进行两次更新,一次又一次。 效率低下。
谢谢。
For multiple fields, you have to create an array of bson element(bson.E
). then append/assign as many fields you want in array item.
var update []bson.E
if r.ReleaseImage != "" {
update = append(update, bson.E{"releaseimage", r.ReleaseImage})
}
if r.Releasepath != "" {
update = append(update, bson.E{"releasepath", r.Releasepath})
}
// now update db
result, err := coll.UpdateOne(
context.Background(),
bson.D{
{"id", r.ID},
},
bson.D{
{"$set", update},
{"$currentDate", bson.D{
{"updated", true},
}},
},
)
Hope this helps
Simply do like this:
uQuery := make(bson.M)
if len(r.ReleaseImage)>0{
uQuery["releaseimage"]=r.ReleaseImage
}
if len(r.Releasepath)>0{
uQuery["releasepath"]=r.Releasepath
}
updateQ := make(bson.M)
updateQ["$set"] = uQuery
Now simply pass 'updateQ' to mongodb update Wrapper function along with findQuery.