Implementing Soft Delete in Mongoose
Aug 7, 2022
A soft delete means setting an isDeleted
flag on the document to mark a document as deleted, rather than actually deleting the document.
This means you can keep the document for future analysis.
const mongoose = require('mongoose');
const testSchema = new mongoose.Schema({
name: String,
isDeleted: Boolean
});
Using Query Middleware
You can use middleware to filter out documents that have isDeleted: true
, so Mongoose only returns documents that don't have isDeleted: true
.
const mongoose = require('mongoose');
const testSchema = new mongoose.Schema({
name: String,
isDeleted: { type: Boolean, defaults: false }
});
testSchema.pre('find', function() {
this.where({ isDeleted: false });
});
testSchema.pre('findOne', function() {
this.where({ isDeleted: false });
});
const Test = mongoose.model('Test', testSchema);
async function run() {
await mongoose.connect('mongodb://localhost:27017');
await mongoose.connection.dropDatabase();
await Test.create({
name: 'Test'
});
await Test.create({
name: 'HiddenTest',
isDeleted: true
});
// Only returns `Test` document, not `HiddenTest`
const docs = await Test.find();
}
run();
Want to become your team's MongoDB expert? "Mastering Mongoose" distills 8 years of hard-earned
lessons building Mongoose apps at scale into 153 pages. That means you can learn what you need
to know to build production-ready full-stack apps with Node.js and MongoDB in a few days.
Get your copy!
Did you find this tutorial useful? Say thanks by starring our repo on GitHub!