gpt4 book ai didi

MongoDB in Go (golang) with mgo : How do I update a record, 找出更新是否成功并在单个原子操作中获取数据?

转载 作者:IT老高 更新时间:2023-10-28 13:08:34 27 4
gpt4 key购买 nike

我在 Go 下使用 MongoDB 的 mgo 驱动程序。

我的应用程序请求一个任务(仅在 Mongo 中从名为“jobs”的集合中选择一个记录),然后将自己注册为受让人以完成该任务(对同一“job”记录的更新,将自身设置为受让人)。

该程序将在多台机器上运行,都与同一个 Mongo 通信。当我的程序列出可用任务然后选择一个时,其他实例可能已经获得了该分配,并且当前分配将失败。

如何确定我读取然后更新的记录在更新时是否具有特定值(在本例中为受让人)?

我正在尝试获得一项任务,无论是哪一项,所以我认为我应该先选择一个待处理的任务并尝试分配它,以防更新成功。

所以,我的查询应该是这样的:

“从集合 'jobs' 的所有记录中,更新 仅一个 具有 assignee=null 的记录,将我的 ID 设置为受让人。然后,给我该记录 所以我可以胜任这份工作。”

我如何使用 Go 的 mgo 驱动程序来表达这一点?

最佳答案

这是一个老问题,但万一有人还在家里看,Query.Apply 很好地支持了这个问题。方法。它确实运行 findAndModify 命令,如另一个答案中所示,但它方便地隐藏在 Go goodness 后面。

文档中的示例与此处的问题几乎完全匹配:

change := mgo.Change{
Update: bson.M{"$inc": bson.M{"n": 1}},
ReturnNew: true,
}
info, err = col.Find(M{"_id": id}).Apply(change, &doc)
fmt.Println(doc.N)

关于MongoDB in Go (golang) with mgo : How do I update a record, 找出更新是否成功并在单个原子操作中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11417784/

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