DEV Community

GreggHume
GreggHume

Posted on • Edited on

MongoDB: How to get fullDocument from changeStream when a document is deleted

In order to get the full document in a watcher after deleting the document you need to enable collMod on the collection. See the below 4 steps.

1.Download mongoshell https://www.mongodb.com/try/download/shell

2.Run mongoshell and paste your connection string with an admin user and press enter (create a temporary admin if you need to) Looks like this:

mongodb+srv://user:QkKvrDtL0yZFERGA@showspace-cluster.1yyql9v.mongodb.net/my-db` 
Enter fullscreen mode Exit fullscreen mode

3.In mongoshell run the following command to change the 'collMod' for your collection - swop out my collection 'ProductReview' for your collection

db.runCommand({collMod: "ProductReview", changeStreamPreAndPostImages: {enabled: true}}) 
Enter fullscreen mode Exit fullscreen mode

4.Now in your app you can setup a change stream and access the deleted document like so (the below code is nodejs)

const client = new MongoClient(env.DATABASE_URL); const database = client.db("my_database"); const reviews = database.collection("ProductReview"); // 'fullDocumentBeforeChange' is the magic here const changeStream = reviews.watch([], { fullDocument: "updateLookup", fullDocumentBeforeChange: "required" }); changeStream.on("change", async (event) => { let document; if (event.operationType === 'delete') { document = event.fullDocumentBeforeChange; } else { document = event.fullDocument; } // do some stuff with the document }); 
Enter fullscreen mode Exit fullscreen mode

Documentation:
https://www.mongodb.com/docs/v6.0/reference/operator/aggregation/changeStream/

Related questions:

Top comments (0)