node.jsmongodbexpressmongoosechangestream

how to get fullDocument from mongoDb when partlicular document is updated?


Actually, I am working on a change stream in Node.js (Express.js). I got stuck in the below situation.

here i have made Database Connetion with mongoDB using mongoose

async function main() {
    const uri = process.env.DATABASE;
    const client = mongoose.connect(uri, {
        useNewUrlParser: true,
        useCreateIndex: true,
        useUnifiedTopology: true,
        reconnectInterval: 500, // Reconnect every 500m
    })

    // Connect to the MongoDB cluster
    await client
        .then(() => console.log('DB Connected'))
        .catch(er => console.log(er));


    const pipeline = [
        {
            '$match': {
                $or: [{ operationType: 'insert' }, { operationType: 'update' }]

            }
        }
    ];
    await monitorListingsUsingEventEmitter(client, 30000,pipeline);



}

main().catch(console.error);


this is function for change stream


async function monitorListingsUsingEventEmitter(client, timeInMs = 60000, pipeline = []) {


    const changeStream = await members.watch(pipeline);

    changeStream.on('change', async (next) => {
        switch (next.operationType) {
            case 'insert':
                console.log('an insert happened...', "uni_ID: ", next.fullDocument);
                break;

            case 'update':
                console.log('an update happened...', next.fullDocument);
//
//getting undefined in above line because there is no property name 'fullDocument' in object next
//      
                break;

            case 'delete':
                console.log('a delete happened...');
                break;

            default:
                break;
        }

    });

overall my question is that :

I need a full document object that is getting updated without any query


Solution

  • I got my answer. I just checked https://www.mongodb.com/docs/manual/reference/method/db.collection.watch/.

    Actully i have use

    const changeStream = await members.watch(pipeline);
    

    above statement should be like this. its working now

    const changeStream = await members.watch(pipeline, { fullDocument: "updateLookup" }
    //this actual answer
    

    Thanks everyone for not answering :) finally i did