How to Delete Document Using Mongoose: Syntax and Examples
To delete a document using
mongoose, use methods like Model.deleteOne(), Model.deleteMany(), or Model.findByIdAndDelete(). These methods remove documents matching the given filter or ID from the database.Syntax
Here are common methods to delete documents in Mongoose:
Model.deleteOne(filter): Deletes the first document matching the filter.Model.deleteMany(filter): Deletes all documents matching the filter.Model.findByIdAndDelete(id): Deletes a document by its unique ID.
Each method returns a promise that resolves with the deletion result.
javascript
Model.deleteOne({ field: value })
Model.deleteMany({ field: value })
Model.findByIdAndDelete(id)Example
This example shows how to delete a user document by ID using findByIdAndDelete and how to delete multiple users with a condition using deleteMany.
javascript
const mongoose = require('mongoose'); // Connect to MongoDB mongoose.connect('mongodb://localhost:27017/testdb', { useNewUrlParser: true, useUnifiedTopology: true }); // Define a simple User schema const userSchema = new mongoose.Schema({ name: String, age: Number }); const User = mongoose.model('User', userSchema); async function run() { // Create sample users await User.create([{ name: 'Alice', age: 25 }, { name: 'Bob', age: 30 }, { name: 'Charlie', age: 35 }]); // Delete one user by ID const userToDelete = await User.findOne({ name: 'Alice' }); const deletedUser = await User.findByIdAndDelete(userToDelete._id); console.log('Deleted user:', deletedUser); // Delete all users older than 30 const deleteResult = await User.deleteMany({ age: { $gt: 30 } }); console.log('Number of users deleted:', deleteResult.deletedCount); // Show remaining users const remainingUsers = await User.find(); console.log('Remaining users:', remainingUsers); mongoose.connection.close(); } run();
Output
Deleted user: { _id: ObjectId("..."), name: 'Alice', age: 25, __v: 0 }
Number of users deleted: 1
Remaining users: [ { _id: ObjectId("..."), name: 'Bob', age: 30, __v: 0 } ]
Common Pitfalls
Common mistakes when deleting documents with Mongoose include:
- Using
deleteOneordeleteManywithout a proper filter, which can delete unintended documents. - Not awaiting the promise, causing code to continue before deletion completes.
- Confusing
findByIdAndDeletewithfindOneAndDelete— the former requires an ID, the latter a filter object.
javascript
/* Wrong: Missing filter deletes nothing or causes error */ await User.deleteOne(); // Incorrect usage /* Right: Provide filter to delete specific document */ await User.deleteOne({ name: 'Bob' });
Quick Reference
| Method | Description | Input | Returns |
|---|---|---|---|
| deleteOne(filter) | Deletes first document matching filter | Filter object | Promise with deletion info |
| deleteMany(filter) | Deletes all documents matching filter | Filter object | Promise with deletion info |
| findByIdAndDelete(id) | Deletes document by its ID | Document ID | Promise with deleted document |
| findOneAndDelete(filter) | Deletes first document matching filter and returns it | Filter object | Promise with deleted document |
Key Takeaways
Use Model.deleteOne(), deleteMany(), or findByIdAndDelete() to remove documents in Mongoose.
Always provide a filter or ID to avoid deleting unintended documents.
Await the deletion promise to ensure the operation completes before proceeding.
findByIdAndDelete requires a document ID, while deleteOne and deleteMany use filter objects.
Check the deletion result to confirm how many documents were removed.