登录
首页 >  Golang >  Go问答

更新多个文档时如何同时更新多个目标

来源:stackoverflow

时间:2024-03-04 10:48:26 258浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《更新多个文档时如何同时更新多个目标》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

示例文档

{"id": 1, "alive":true},
{"id": 2, "alive":true},
{"id": 3, "alive":true},
{"id": 4, "alive":true}

问题

如果得到像 var targetids []int{1, 3, 4} 这样的目标。想要将多个文档的活动值更新为 false。目前正在使用这种方式。

var targetids []int{1, 3, 4}
collection := mongoclient.database("my_database").collection("my_collection")
updatedoc := bson.m {
    "$set": bson.m {
        "alive": false,
    }
}
for _, targetid := range targetids{
    filter := bson.m{
        "id": targetid,
    }
    _, err := collection.updateone(context.background(), filter, updatedoc)
    if err != nil {
        panic(err)
    }
}

例如在postgresql中可以使用这种方式

UPDATE [my_table] SET alive = false WHERE id IN [targetIds];

不使用for循环。一个查询就像示例 postgresql 查询中的方式

go mongodb 驱动程序中有类似的方法吗?


解决方案


使用 Collection.UpdateMany() 而不是 Collection.UpdateOne(),并构造一个与 id 切片匹配的过滤器:

filter := bson.M{
    "id": bson.M{"$in": targetIds},
}
_, err := collection.UpdateMany(context.Background(), filter, updateDoc)
if err != nil {
    panic(err)
}

今天关于《更新多个文档时如何同时更新多个目标》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>