Ett sätt att göra det är att tilldela ett unikt numeriskt ID till vart och ett av dina MongoDB-dokument och att tilldela en unik numerisk identifierare till var och en av dina node.js-arbetare.
Till exempel, ha en env var som heter NUM_WORKERS och sedan i din node.js-modul:
var NumWorkers = process.env.NUM_WORKERS || 1;
Du måste sedan tilldela ett unikt, sammanhängande instansnummer-id (i intervallet 0 till NumWorkers-1) till var och en av dina arbetare (t.ex. via en kommandoradsparameter som läses av din node.js-process när den initieras). Du kan lagra det i en variabel som heter MyWorkerInstanceNum.
När du väljer ett dokument från MongoDB, anropar du följande funktion (som skickar dokumentets unika documentId som en parameter):
function isMine(documentId){
//
// Example: documentId=10
// NumWorkers= 4
// (10 % 4) = 2
// If MyWorkerInstanceNum is 2, return true, else return false.
return ((documentId % NumWorkers) === MyWorkerInstanceNum);
}
Fortsätt bara att faktiskt bearbeta dokumentet om isMine() returnerar true.Så flera arbetare kan "välja" ett dokument, men bara en arbetare kommer faktiskt att bearbeta det.