Není to dobře zdokumentováno, ale cursor.each poskytuje null hodnotu do druhého parametru jeho zpětného volání, což znamená, že kurzor nemá k dispozici žádné další dokumenty. Je zmíněn pouze v příkladu dokumentace .
Takže ve vašem případě byste měli kontrolovat user !== null ve vašem users.each zpětné volání.
Bylo by však efektivnější nechat mongo, aby za vás vyhledával změnou find zavolejte na:
collection.findOne({email: email}, {}, function(err, user) {
if (user) {
// email was found case
...
}
...
}