Las inserciones ocurren más rápido de lo que la función after.insert puede procesar y lo que quiero que suceda después de insertar el documento actual depende de lo que sucedió después de insertar el documento anterior.
Creo que la pregunta corta podría ser ¿cómo lo hago sincrónico?
FirstCollection.after.insert(function (userId, doc) { lastDoc = SecondCollection.findOne({}, { sort: { $natural: -1 } }); if (!lastDoc) { SecondCollection.insert({ startNumber: doc.txNumber, count: 1, duration: 264, lastTx: doc.txNumber, time: Date.now(), finishedAt: 0, }); return; } if (lastDoc.finishedAt !== 0) { if (Date.now() - lastDoc.finishedAt < 60000) { return; } SecondCollection.insert({ startNumber: doc.txNumber, count: 1, duration: 264, last: doc.txNumber, time: Date.now(), finishedAt: 0, }); return; } SecondCollection.update( { _id: lastDoc._id }, { $set: { lastTx: doc.txNumber }, $inc: { count: 1 } } ); if (lastDoc.count === lastDoc.duration) { SecondCollection.update( { _id: lastDoc._id }, { $set: { finishedAt: Date.now() } } ); } });