Se non vuoi caricare tutti i risultati in memoria usando toArray, puoi scorrere usando il cursore con qualcosa di simile al seguente.
myCollection.find({}, function(err, resultCursor) {
function processItem(err, item) {
if(item === null) {
return; // All done!
}
externalAsyncFunction(item, function(err) {
resultCursor.nextObject(processItem);
});
}
resultCursor.nextObject(processItem);
}