我在 Go 下为 MongoDB 使用 mgo 驱动程序。
我的应用程序请求一个任务(仅在 Mongo 中从名为“jobs”的集合中选择一个记录),然后将自己注册为受让人以完成该任务(对同一“工作”记录的更新,将自己设置为受让人)。
该程序将在多台机器上运行,都与同一个 Mongo 通信。当我的程序列出可用任务然后选择一个时,其他实例可能已经获得了该分配,并且当前分配将失败。
如何确定我读取然后更新的记录在更新时是否具有特定值(在本例中为受让人)?
我正在尝试获得一项任务,无论是哪一项,所以我认为我应该首先选择一个待处理的任务并尝试分配它,以防万一更新成功。
所以,我的查询应该是这样的:
“从集合 'jobs' 的所有记录中,仅更新一个assignee=null 的记录,将我的 ID 设置为受让人。 然后,给我该记录,以便我可以运行该作业。”
我怎么能用 Go 的 mgo 驱动程序来表达呢?