Lorsque l'application ou la base de données se bloque soudainement entre l'application de la transaction à A et l'application de la transaction à B, il y aura toujours une transaction avec state:"pending"
dans la collection de transactions globales. Votre script de récupération que vous exécutez après un crash devrait le remarquer, vérifier les deux comptes et voir qu'il y a une transaction en attente dans l'un, mais pas dans l'autre. Il sait maintenant tout ce qu'il doit savoir pour soit annuler la transaction, soit essayer de la terminer.
Oui, écrire un script de récupération aussi intelligent n'est pas facile. Mais les transactions dans un système de base de données qui n'est pas conçu pour eux sont toujours difficiles. Parfois, vous pouvez contourner l'exigence de transactions dans MongoDB en concevant vos documents de manière à ce que les champs qui doivent être mis à jour ensemble soient toujours dans le même document, mais il n'y a pas toujours de moyen sensé de le faire. Lorsque votre cas d'utilisation a absolument besoin de transactions, protégez votre santé mentale et utilisez une base de données relationnelle.