Ik heb het probleem kunnen oplossen.
Het probleem was niet met de onderstaande code
await session.commitTransaction(); (success)
session.endSession(); (failure)
} catch (error) { (entered)
await session.abortTransaction(); (invoked)
maar het was met de records.forEach-lus.
records.forEach(async (el: any) => {...});
binnen de foreach wanneer een fout wordt gegooid, wordt deze niet opgevangen door het buitenste try-catch-blok, omdat de inhoud in de lus zich in een andere functionele context bevindt dan de code buiten de lus.
Zodra ik de lus veranderde van .forEach
naar
for (const el of records) {}
het werkt zoals verwacht. Het antwoord plaatsen voor het geval iemand in de toekomst hetzelfde tegenkomt. Bedankt voor de steun jongens :)