Documentation / @andrew_l/mongo-transaction / withMongoTransaction
Function: withMongoTransaction()
withMongoTransaction(options)
withMongoTransaction<
T
,K
,Args
>(options
):WithMongoTransactionWrapped
<T
,K
,Args
>
Runs a provided callback within a transaction, retrying either the commitTransaction operation or entire transaction as needed (and when the error permits) to better ensure that the transaction can complete successfully.
Passes the session as the function's first argument or via useMongoSession()
hook
Type Parameters
• T
• K = any
• Args extends any
[] = any
[]
Parameters
• options: WithMongoTransactionOptions
<T
, K
, Args
>
Returns
WithMongoTransactionWrapped
<T
, K
, Args
>
Example
const executeTransaction = withMongoTransaction({
connection: () => mongoose.connection.getClient(),
async fn() {
const session = useMongoSession();
const orders = mongoose.connection.collection('orders');
const { modifiedCount } = await orders.updateMany(
{ status: 'pending' },
{ $set: { status: 'confirmed' } },
{ session },
);
},
});
withMongoTransaction(connection, fn, options)
withMongoTransaction<
T
,K
,Args
>(connection
,fn
,options
?):WithMongoTransactionWrapped
<T
,K
,Args
>
Runs a provided callback within a transaction, retrying either the commitTransaction operation or entire transaction as needed (and when the error permits) to better ensure that the transaction can complete successfully.
Passes the session as the function's first argument or via useMongoSession()
hook
Type Parameters
• T
• K = any
• Args extends any
[] = any
[]
Parameters
• connection: ConnectionValue
• fn: Callback
<T
, K
, Args
>
• options?: Omit
<WithMongoTransactionOptions
<any
, any
, any
[]>, "fn"
| "connection"
>
Returns
WithMongoTransactionWrapped
<T
, K
, Args
>
Example
const executeTransaction = withMongoTransaction(mongoose.connection.getClient(), async () => {
const session = useMongoSession();
const orders = mongoose.connection.collection('orders');
const { modifiedCount } = await orders.updateMany(
{ status: 'pending' },
{ $set: { status: 'confirmed' } },
{ session },
);
});