Helper methods for Mongoose and MongoDB transactions (Check out this medium post to know more about it).
The library comes with @types for Typescript users.
npm i mongoose-transact-utils
OR
yarn add mongoose-transact-utils
const { runInTransaction } = require('mongoose-transact-utils');
const { User } = require('./models');
// any queries or write you want to do using transaction
(async () => {
// runInTransction catches any error in the callback to abort the transaction session
// and then rethrows the error for you to handle the reporting
await runInTransaction(async session => {
// run any queries here
await addFriend('John', 'Jane', session);
});
console.log('John and Jane are friend now!');
})();
async function addFriend(nameA, nameB, session) {
const userA = await User.findOne({ name: nameA }).session(session);
const userB = await User.findOne({ name: nameB }).session(session);
userA.friends.push(userB._id);
userB.friends.push(userA._id);
await userA.save();
await userB.save();
}
We are more than happy to accept contributions to this project in form of feedback, bug reports and pull requests.
References:
- https://mongoosejs.com/docs/transactions.html
- https://docs.mongodb.com/manual/core/write-operations-atomicity/
- NPM Package
- Medium Post
- Soumyajit @drenther
- Sharad @csharad
- Nitish @nitish-mehta
- CashPositive