The watch method lets you see changes in your database as they happen. It helps you react quickly without checking over and over.
Watch method for real-time updates in MongoDB
const changeStream = collection.watch(pipeline, options); changeStream.on('change', (change) => { // handle change event });
collection.watch() starts watching changes on a collection.
You can add a pipeline to filter which changes to watch.
const changeStream = db.collection('messages').watch(); changeStream.on('change', (change) => { console.log('Change detected:', change); });
const pipeline = [ { $match: { operationType: 'insert' } } ]; const changeStream = db.collection('orders').watch(pipeline); changeStream.on('change', (change) => { console.log('New order:', change.fullDocument); });
This program connects to a MongoDB database called 'shop' and watches the 'orders' collection for new orders. When a new order is added, it prints the order details immediately.
const { MongoClient } = require('mongodb'); async function watchOrders() { const client = new MongoClient('mongodb://localhost:27017'); await client.connect(); const db = client.db('shop'); const orders = db.collection('orders'); const changeStream = orders.watch([ { $match: { operationType: 'insert' } } ]); console.log('Watching for new orders...'); changeStream.on('change', (change) => { console.log('New order received:', change.fullDocument); }); } watchOrders();
The watch method requires MongoDB replica sets or sharded clusters.
Remember to close the change stream when done to avoid resource leaks.
You can watch at database or cluster level too, not just collections.
The watch method helps you get real-time updates from your database.
You can filter which changes to watch using a pipeline.
It is useful for apps that need instant reactions to data changes.
Practice
watch method in MongoDB?Solution
Step 1: Understand the watch method's role
Thewatchmethod is designed to monitor changes in the database as they happen.Step 2: Compare with other options
Backup, indexing, and deleting are unrelated to real-time monitoring.Final Answer:
To listen for real-time changes in the database -> Option CQuick Check:
watch method = real-time updates [OK]
- Confusing watch with backup or indexing
- Thinking watch deletes data
- Assuming watch modifies data
orders in MongoDB?Solution
Step 1: Recall the correct method name
The method to watch changes iswatch(), not listen, observe, or track.Step 2: Apply method to collection
Callingwatch()ondb.ordersis the correct syntax.Final Answer:
db.orders.watch() -> Option AQuick Check:
Correct method is watch() [OK]
- Using listen(), observe(), or track() which don't exist
- Forgetting parentheses after watch
- Calling watch on the database instead of collection
users collection?
const changeStream = db.users.watch();
changeStream.on('change', (change) => {
console.log(change.operationType);
});Solution
Step 1: Understand the event listener
The code listens for any change event on theuserscollection and logs theoperationType.Step 2: Identify the operation type for insertion
When a new document is inserted, theoperationTypeisinsert.Final Answer:
'insert' -> Option AQuick Check:
Insert triggers operationType 'insert' [OK]
- Expecting 'update' or 'delete' for insert events
- Thinking no output occurs without explicit fetch
- Confusing operationType with full document
const changeStream = db.products.watch({ fullDocument: 'updateLookup' });
changeStream.on('change', (change) => {
console.log(change.fullDocument);
});Solution
Step 1: Check watch method parameters
Thewatchmethod accepts an optional array pipeline as the first argument, not an object with options.Step 2: Understand where options go
Options likefullDocumentshould be passed as the second argument, not inside the pipeline array.Final Answer:
The options should be passed as the second argument, not as the first argument object -> Option BQuick Check:
Pipeline is array, options are separate [OK]
- Passing options as first argument instead of second
- Using invalid values for fullDocument
- Misusing event handlers on change streams
messages collection and get the full updated document in real-time. Which code snippet correctly achieves this?Solution
Step 1: Filter for update operations
Use a pipeline with$matchto watch onlyupdateoperation types.Step 2: Get full updated document
SetfullDocumentoption to'updateLookup'to receive the full document on update.Step 3: Verify correct syntax
Pass the pipeline array as first argument and options object as second argument towatch.Final Answer:
db.messages.watch([{ $match: { operationType: 'update' } }], { fullDocument: 'updateLookup' }) -> Option DQuick Check:
Pipeline filter + fullDocument 'updateLookup' = db.messages.watch([{ $match: { operationType: 'update' } }], { fullDocument: 'updateLookup' }) [OK]
- Passing options as first argument instead of second
- Using fullDocument: 'default' which doesn't guarantee full doc on update
- Not filtering operationType in pipeline
Ready to prove it?
Pass the test and this pattern moves unknown
