これを行う1つの方法は、各MongoDBドキュメントに一意の数値IDを割り当て、各node.jsワーカーに一意の数値識別子を割り当てることです。
たとえば、NUM_WORKERSというenv変数を作成し、node.jsモジュールに次のように記述します。
var NumWorkers = process.env.NUM_WORKERS || 1;
次に、一意の連続したインスタンス番号ID(0からNumWorkers-1の範囲)を各ワーカーに割り当てる必要があります(たとえば、初期化時にnode.jsプロセスによって読み取られるコマンドラインパラメーターを介して)。 MyWorkerInstanceNumという変数に保存できます。
MongoDBからドキュメントを選択するときは、次の関数を呼び出します(ドキュメントの一意のdocumentIdをパラメーターとして渡します):
function isMine(documentId){
//
// Example: documentId=10
// NumWorkers= 4
// (10 % 4) = 2
// If MyWorkerInstanceNum is 2, return true, else return false.
return ((documentId % NumWorkers) === MyWorkerInstanceNum);
}
isMine()がtrueを返した場合にのみ、実際にドキュメントを処理し続けます。したがって、複数のワーカーがドキュメントを「選択」できますが、実際に処理するのは1人のワーカーだけです。