[英]How can I update and specific nested struct field in MongoDB with golang using bson
[英]Nested field update using golang struct in mongoDB
我遇到了使用 golang mongo 驅動程序更新文檔的問題。 場景:我想更新嵌套在結構中的字段。 例如:StructOuter -> structInner -> field1、field2、field3。 現在,如果我想更新 field3 並且我有相應的值作為另一個結構,我怎么能通過單獨更新這個字段來提前 go。 我嘗試使用下面的代碼,但它更新了整個 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"`
}
您可以嘗試添加如下方法來構造更新語句。 這些以點符號格式返回。
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.