Skip to main content

CRUD: Delete

Delete operations permanently remove documents from a collection. While deleting data seems straightforward, it’s one of the most critical operations to handle carefully—deleted data cannot be recovered without a backup.

Why Deletion Requires Care

The Problem with Hard Deletes

When you delete a document in MongoDB, it’s gone immediately. This can cause issues:
  • No undo option: Accidental deletions can’t be reversed
  • Broken references: Other documents may reference the deleted document
  • Lost history: You lose valuable data for analytics or auditing
  • Cascade effects: Related data may become orphaned

Soft Deletes: A Safer Alternative

Many production applications use soft deletes instead—marking documents as deleted without actually removing them:
// Soft delete: mark as deleted instead of removing
db.users.updateOne(
  { _id: userId },
  { 
    $set: { 
      isDeleted: true, 
      deletedAt: new Date() 
    } 
  }
)

// Query only active documents
db.users.find({ isDeleted: { $ne: true } })
This approach preserves data integrity while allowing “deleted” items to be filtered out of normal queries.
Always ensure you have proper backups before running delete operations, especially deleteMany() with broad filters.

Hard Delete Operations

When you genuinely need to remove data (e.g., GDPR compliance, storage optimization), MongoDB provides these methods:

deleteOne()

Removes the first document that matches the filter.
db.users.deleteOne({ name: "Alice" })

deleteMany()

Removes all documents that match the filter.
db.users.deleteMany({ status: "inactive" })

Removing All Documents

To remove all documents from a collection but keep the collection itself (and its indexes):
db.users.deleteMany({})
To remove the collection entirely (more efficient if you want to delete everything):
db.users.drop()

Summary

  • Use deleteOne() to remove a single document.
  • Use deleteMany() to remove multiple documents.
  • Be careful! Deleted data cannot be easily recovered without a backup.