mongo更新数组字段_Golang MongoDB Driver 更新符合条件的数组元素的字段

在 MongoDB 的 Shell 里修改文档里某个符合条件的数组里的值的字段,可以这样:

db.collection.updateMany(

{ },

{ : { ".$[]" : value } },

{ arrayFilters: [ { : } ] }

)

而在 GoLang 中我们需要使用 MongoDB Driver。

比如有一个 Collection 里每个文档是这样的:

{

"name": "..",

"array": []{

{

"name": "a",

"detail": "....",

},

{

"name": "b",

"detail": "....",

}

}

}

我们要修改 name 为 x 的文档里面 array 里 name 为 b 的记录的 detail 信息为"test"。可以这样写:

filter := bson.M{"name": "x", "array.name": "b"}

update := bson.M{"array.$[item].detail": "test"}

arrayFilter := bson.M{"item.name": "b"}

// coll 是 mongo 的 Collection,下面内容不需要修改。

res := coll.FindOneAndUpdate(context.Background(),

filter,

bson.M{"$set": update},

options.FindOneAndUpdate().SetArrayFilters(

options.ArrayFilters{

Filters: []interface{}{

arrayFilter,

},

},

))

if res.Err() != nil {

// log error

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值