GoでMongoDB用のmgoドライバーを使用しています。
私のアプリケーションはタスクを要求し(Mongoで「jobs」と呼ばれるコレクションからレコードを選択するだけで)、そのタスクを完了するために自分自身を担当者として登録します(同じ「job」レコードへの更新、自分自身を担当者として設定します)。
プログラムは複数のマシンで実行され、すべて同じMongoと通信します。私のプログラムが利用可能なタスクをリストしてから1つを選択すると、他のインスタンスがすでにその割り当てを取得している可能性があり、現在の割り当ては失敗します。
読んでから更新したレコードが、更新時に特定の値(この場合は担当者)を持っているかどうかを確認するにはどうすればよいですか?
どちらの割り当てでも取得しようとしているので、最初に保留中のタスクを選択して割り当てを試み、更新が成功した場合に備えて割り当てを保持する必要があると思います。
したがって、私のクエリは次のようになります。
「コレクション'jobs'のすべてのレコードから、assignee = null のレコードだけを更新し、IDを担当者として設定します。次に、そのレコードを渡して、ジョブを実行できるようにします。」
Go用のmgoドライバーでそれをどのように表現できますか?