En måde at gøre det på er at tildele et unikt numerisk ID til hvert af dine MongoDB-dokumenter og at tildele en unik numerisk identifikator til hver af dine node.js-arbejdere.
For eksempel, har en env var kaldet NUM_WORKERS, og derefter i dit node.js modul:
var NumWorkers = process.env.NUM_WORKERS || 1;
Du skal derefter tildele et unikt, sammenhængende instansnummer-id (i området 0 til NumWorkers-1) til hver af dine arbejdere (f.eks. via en kommandolinjeparameter, der læses af din node.js-proces, når den initialiseres). Du kan gemme det i en variabel kaldet MyWorkerInstanceNum.
Når du vælger et dokument fra MongoDB, skal du kalde følgende funktion (overføre dokumentets unikke 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æt kun med faktisk at behandle dokumentet, hvis isMine() returnerer true.Så flere arbejdere kan "vælge" et dokument, men kun én arbejder vil faktisk behandle det.