Deleting documents lets you remove unwanted or outdated data from your database. It keeps your app clean and up to date.
Deleting documents in Express
Start learning this pattern below
Jump into concepts and practice - no test required
Model.deleteOne(filter, callback) Model.deleteMany(filter, callback) Model.findByIdAndDelete(id, callback)
deleteOne removes the first document matching the filter.
deleteMany removes all documents matching the filter.
User.deleteOne({ email: 'user@example.com' }, (err) => {
if (err) console.error(err);
else console.log('User deleted');
});Post.deleteMany({ published: false }, (err) => {
if (err) console.error(err);
else console.log('All unpublished posts deleted');
});Comment.findByIdAndDelete('64a1f2b3c4d5e6f7a8b9c0d1', (err, doc) => { if (err) console.error(err); else console.log('Deleted comment:', doc); });
This Express app connects to MongoDB and defines a route to delete a user by their email. It uses deleteOne to remove the user document. If no user matches, it sends a 404 response. Otherwise, it confirms deletion.
import express from 'express'; import mongoose from 'mongoose'; const app = express(); app.use(express.json()); const userSchema = new mongoose.Schema({ name: String, email: String }); const User = mongoose.model('User', userSchema); // Connect to MongoDB mongoose.connect('mongodb://localhost:27017/myapp'); // Route to delete a user by email app.delete('/users', async (req, res) => { try { const result = await User.deleteOne({ email: req.body.email }); if (result.deletedCount === 0) { return res.status(404).send('User not found'); } res.send('User deleted successfully'); } catch (error) { res.status(500).send('Error deleting user'); } }); app.listen(3000, () => { console.log('Server running on http://localhost:3000'); });
Always check if the document exists before or after deleting to handle errors gracefully.
Use deleteMany carefully to avoid removing too much data by mistake.
Deleting documents does not undo automatically; consider backups if needed.
Deleting documents removes unwanted data from your database.
Use deleteOne, deleteMany, or findByIdAndDelete depending on your need.
Handle errors and check results to keep your app stable.
Practice
deleteOne() method do in Express when working with a database?Solution
Step 1: Understand
ThedeleteOne()purposedeleteOne()method removes only one document that matches the given filter.Step 2: Compare with other methods
deleteMany()deletes multiple documents, andfind()only retrieves data without deleting.Final Answer:
Deletes a single document that matches the filter criteria. -> Option AQuick Check:
deleteOne()= deletes one document [OK]
- Confusing deleteOne with deleteMany
- Thinking deleteOne updates documents
- Assuming deleteOne finds but does not delete
Solution
Step 1: Recall Mongoose method for deleting by ID
The correct method isfindByIdAndDelete()which deletes a document by its ID.Step 2: Check syntax correctness
OnlyModel.findByIdAndDelete(id, callback);matches the official Mongoose syntax.Final Answer:
Model.findByIdAndDelete(id, callback); -> Option AQuick Check:
UsefindByIdAndDeleteto delete by ID [OK]
- Using non-existent methods like deleteById
- Confusing deleteOne with findByIdAndDelete
- Missing callback or async handling
Model.deleteMany({ status: 'inactive' })
.then(result => console.log(result.deletedCount))
.catch(err => console.error(err));Solution
Step 1: Understand deleteMany return value
deleteMany()returns an object withdeletedCountindicating how many documents were deleted.Step 2: Analyze the console.log statement
The code logsresult.deletedCount, so it outputs the number of deleted documents matching the filter.Final Answer:
Number of documents deleted with status 'inactive'. -> Option CQuick Check:
deleteMany()returns deletedCount [OK]
- Expecting deleted documents array
- Assuming deleteMany returns nothing
- Confusing deletedCount with total documents
Model.deleteOne({ _id: id }, (err, doc) => {
if (err) console.log(err);
else console.log(doc);
});Solution
Step 1: Check callback parameters for deleteOne
The second callback parameter is a result object, not the deleted document itself.Step 2: Understand what
It should be nameddocrepresentsresultor similar to reflect it contains deletion info likedeletedCount, not the document.Final Answer:
The callback parameterdocshould beresultto access deletion info. -> Option DQuick Check:
Callback gets result info, not deleted doc [OK]
- Expecting deleted document in callback
- Using deleteMany when only one document needed
- Assuming deleteOne does not accept callbacks
active is false, but only if the user confirms. Which Express code snippet correctly handles this with error checking?Solution
Step 1: Check user confirmation before deleting
if(confirm) { Model.deleteMany({ active: false }) .then(res => console.log(`${res.deletedCount} deleted`)) .catch(err => console.error(err)); } uses anif(confirm)check to ensure deletion only happens after user confirmation.Step 2: Verify deletion and error handling
It usesdeleteManyto delete all matching documents, logs the count, and catches errors properly.Final Answer:
if(confirm) { Model.deleteMany({ active: false }) .then(res => console.log(`${res.deletedCount} deleted`)) .catch(err => console.error(err)); } -> Option BQuick Check:
Confirm before delete, handle errors [OK]
- Using deleteOne instead of deleteMany for multiple docs
- Not checking user confirmation before deleting
- Throwing errors instead of catching them
