gpt4 book ai didi

mongodb - 在mongoDB中使用golang结构进行嵌套字段更新

转载 作者:行者123 更新时间:2023-12-01 22:14:06 29 4
gpt4 key购买 nike

我使用golang mongo驱动程序遇到更新文档问题。
场景:我想更新嵌套在结构中的字段。例如:StructOuter-> structInner-> field1,field2,field3。现在,如果我要更新field3,并且具有对应的值作为另一个结构,那么如何仅通过更新此字段就可以继续进行。我尝试使用下面的代码,但它会更新整个structInner,仅保留field3:

conv, _ := bson.Marshal(prod)
bson.Unmarshal(conv, &updateFields)
update := bson.M{
"$set": updateFields,
}
model.SetUpdate(update).

样本JSON:
{
"field_one": "value",
"data": {
"field_two": [
"data1",
"data2"
],
"field_three": "check",
"field_four": "abc",
"field_five": "work",
}
}

我想避免进行硬编码的字段查询以进行更新。

只是想知道是否支持此功能,如果可以,您可以帮我解决这个问题,并指向与此有关的一些深层次链接。

最佳答案

如果您可以控制代码,则可以尝试在该结构上创建方法。这些方法可以帮助您构造字段路径以执行部分​​更新。例如,如果您具有以下结构:

type Outer struct {
Data Inner `bson:"data"`
}

type Inner struct {
FieldThree string `bson:"field_three"`
FieldFour string `bson:"field_four"`
}

您可以尝试添加以下方法来构造更新语句。这些以 dot-notation格式返回。

func (o *Outer) SetFieldThree(value string) bson.E {
return bson.E{"data.field_three", value}
}
func (o *Outer) SetFieldFour(value string) bson.E {
return bson.E{"data.field_four", value}
}

要进行更新,可以构造如下的语句:

x := Outer{}
var updateFields bson.D
updateFields = append(updateFields, x.SetFieldThree("updated"))
updateFields = append(updateFields, x.SetFieldFour("updated"))

statement := bson.D{{"$set", updateFields}}
result, err := collection.UpdateOne(ctx, bson.M{}, statement)

关于mongodb - 在mongoDB中使用golang结构进行嵌套字段更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61499753/

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