Creating a Simple Application: Real-time Notification System
Let’s create a basic real-time notification system using MongoDB Change Streams. We’ll build a Node.js application that listens for changes in a MongoDB collection and triggers notifications for new document insertions.
Before understanding the example, we must ensure that have MongoDB installed and configured on our system. Additionally, we’ll need a MongoDB driver compatible with our programming language of choice.
Step 1: Connect to MongoDB
First, establish a connection to our MongoDB database using the appropriate driver for Node.js.
// Import the MongoClient class from the 'mongodb' package
const { MongoClient } = require('mongodb');
// Define an asynchronous function to connect to MongoDB
async function connectToMongoDB() {
// Create a new MongoClient instance with the connection string
const client = new MongoClient('mongodb://localhost:27017', { useUnifiedTopology: true });
try {
// Attempt to connect to the MongoDB server
await client.connect();
// Log a success message if connected
console.log('Connected to MongoDB');
// Return the database object from the client
return client.db('myDatabase');
} catch (error) {
// Log an error message if connection fails
console.error('Error connecting to MongoDB:', error);
}
}
// Call the connectToMongoDB function and assign the returned database object to 'db'
const db = await connectToMongoDB();
Explanation: This above code snippet establishes a connection to a MongoDB database using the MongoClient class from the ‘mongodb‘ package. It defines an asynchronous function connectToMongoDB that creates a new MongoClient instance with the connection string ‘mongodb://localhost:27017‘, attempts to connect to the MongoDB server, and returns the database object from the client if successful. The useUnifiedTopology option is set to true for better connection handling. If the connection fails, an error message is logged. Finally, the function is called, and the returned database object is assigned to the variable ‘db‘.
Step 2: Create a Change Stream
Next, create a change stream to monitor the desired collection for insertions.
// Access the 'notifications' collection from the connected database
const collection = db.collection('notifications');
// Create a change stream on the 'notifications' collection
const changeStream = collection.watch();
Explanation: This code snippet accesses the ‘notifications‘ collection from the connected MongoDB database using the ‘db.collection‘ method. It then creates a change stream on the ‘notifications‘ collection using the ‘watch‘ method. This change stream will allow the application to listen for changes in the ‘notifications‘ collection in real-time.
Step 3: Listen for Changes
Now, listen for changes in the change stream and handle new document insertions.
// Listen for changes in the change stream
changeStream.on('change', (change) => {
// Check if the change is an insertion
if (change.operationType === 'insert') {
// Extract the new document from the change event
const newNotification = change.fullDocument;
// Log the new notification to the console
console.log('New notification:', newNotification);
// Implement notification logic here (e.g., sending an email, triggering a notification)
}
});
Explanation:This code sets up a listener for changes in the change stream. When a change event occurs, it checks if the operation type is an insertion (‘insert‘). If it is, it extracts the new document from the change event and logs it to the console as a new notification. we can implement notification logic within this block, such as sending an email or triggering a notification.
Step 4: Run the Application
Start our Node.js application to begin listening for changes and triggering notifications.
node app.js
How to use MongoDB Change Streams as a Powerful Event-Driven Engine
MongoDB Change Streams facilitate real–time monitoring of MongoDB databases, enabling applications to respond quickly to changes allow the creation of robust event-driven systems. These streams offer a unified interface to subscribe to various types of changes, including document insertions, updates, deletions, and database and collection–level events.
In this article, We will learn about What are MongoDB Change Streams, Where to Use Change Streams, and their Features with the help of real-life examples like Real-time Notification Systems and so on.