Home > database >  Delete a MongoDB document in Express JS
Delete a MongoDB document in Express JS

Time:12-03

I'm staggered by how much I'm struggling to delete a document in MongoDB from Express JS. I'm finding the mix of documentation and methods including deleteOne, findByIdAndRemove, some tutorials say you need to declare an ObjectId, and some don't. Madness.

Anyway, below is my code. I have a function to connect to the database:

const withDB = async (operations, res) => {
    try {
        const client = await MongoClient.connect('mongodb://localhost:27017', { useNewUrlParser: true });
        const db = client.db('database-name');
        await operations(db);
        client.close();
    } catch (error) {
        res.status(500).json({ message: 'Error connecting to db', error });
    }
}

And then the below is my delete command:

app.delete('/api/reports/delete-report/:id', async (req, res) => {

    //call withDB function above
    withDB(async (db) => {       

        //delete command 
        const result = await db.collection('reports').deleteOne( { _id : new MongoClient.ObjectId(req.params.id) } );
        
        //get reports
        const reportInfo = await db.collection('reports').find().toArray()
        
        //put returned reports into the result provided
        res.status(200).json(reportInfo);

    }, res);
});

For my troubles I get the message 'Error connecting to db'. If I make the delete command:

const result = await db.collection('reports').deleteOne( { _id : req.params.id } );

I just get the contents of the database returned, but there's no deletion.

CodePudding user response:

The issue is:

new MongoClient.ObjectId(req.params.id)

You don't want to create another mongoclient. It needs to be

new ObjectId(req.params.id)

and make sure you import that class:

const { MongoClient, ObjectId } = require('mongodb');
  • Related