我在Go下为MongoDB使用mgo驱动程序。MongoDB in Go(golang)with mgo:如何更新记录,找出更新是否成功,并在单个原子操作中获取数据?
我的应用程序要求一个任务(只需从一个名为“jobs”的集合中选择一个Mongo记录),然后将自己注册为一个asignee来完成该任务(对同一个“job”记录的更新,设置自己作为受让人)。
该程序将在多台机器上运行,所有机器都与同一个Mongo交谈。当我的程序列出可用任务并选择一个时,其他实例可能已经获得了该分配,并且当前分配失败。
如何确保在更新时我读取并更新的记录确实或没有特定的值(在本例中为受让人)?
我想得到一个任务,无论是哪一个,所以我认为我应该先选择一个待处理任务并尝试分配它,保持它只是在更新成功的情况下。
所以,我的查询应该是这样的:
“从上收集‘工作’的所有记录,更新只是一个有asignee = null时,设置我的ID作为受让人然后,给我。那记录所以我可以运行这项工作。“
我怎么能用mgo驱动程序表达这个问题呢?
其实,我需要的解决方案是提供的一个tux21b。我需要撤消所有“选项”,然后选择一个,然后尝试将其分配给我自己。如果不成功,我会尝试与另一个。 – 2012-09-10 18:20:15
为什么你需要选择所有的选项?你有没有说你只需要选择没有采取(又名assignee == null)? – 2012-09-11 16:12:18
你说得对。我的需求结果与我在写这个问题时想的不同,但你的回答更适合这个问题。 – 2012-09-11 21:12:03