Handling Multi-Document Transactions in MongoDB
Introduction
Multi-document transactions in MongoDB allow you to execute a series of operations across multiple documents and collections while maintaining ACID (Atomicity, Consistency, Isolation, Durability) properties. Transactions are particularly useful in applications that require atomic updates to multiple documents or collections.
Setting Up
Ensure you have MongoDB 4.0 or later installed, as transactions are supported starting from version 4.0. Additionally, transactions are only supported in replica sets and sharded clusters.
Using Transactions
To use transactions in MongoDB, follow these steps:
Start a Session
First, start a session:
Example: Starting a Session
from pymongo import MongoClient client = MongoClient("mongodb://localhost:27017") session = client.start_session()
Start a Transaction
Next, start a transaction within the session:
Example: Starting a Transaction
session.start_transaction()
Perform Operations
Perform the desired operations within the transaction:
Example: Performing Operations
collection1 = client.db.collection1 collection2 = client.db.collection2 collection1.insert_one({"name": "Alice"}, session=session) collection2.insert_one({"name": "Bob"}, session=session)
Commit the Transaction
Commit the transaction to apply the operations atomically:
Example: Committing a Transaction
session.commit_transaction()
Abort the Transaction
If an error occurs, you can abort the transaction:
Example: Aborting a Transaction
session.abort_transaction()
Example: Full Transaction
Here is a complete example of using a transaction in MongoDB:
Example: Full Transaction
try: session.start_transaction() collection1.insert_one({"name": "Alice"}, session=session) collection2.insert_one({"name": "Bob"}, session=session) session.commit_transaction() print("Transaction committed") except Exception as e: session.abort_transaction() print(f"Transaction aborted: {e}")
Conclusion
In this tutorial, you have learned how to use multi-document transactions in MongoDB to ensure atomicity across multiple operations. Transactions are a powerful feature for maintaining data consistency in applications that require complex updates.