Skip to content

riyadhalnur/mongoose-softdelete

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Build Status

Mongoose Soft Delete Plugin

Mongoose plugin that enables soft deletion of Models/Documents.

This plugin is based on the work of Yi.

What's Different

In the original plugin, models were deleted with a date reference only. This version takes that and uses a Boolean flag to to mark models deleted/restored. Adds deletedAt field to record when a document was deleted. Additionally, it removes a lot of overhead from the original code and doesn't use Coffeescript.

Also checkout Mongoose Delete by Sanel Deljkic.

License

This plugin is licensed under the MIT license and can ve viewed in the LICENSE file.

Installation

Install using npm

npm install mongoose-softdelete --save

Tests

IMPORTANT: You need to have MongoDB running to run tests

npm test

Usage

models/test.js

const mongoose = require('mongoose'),
    Schema = mongoose.Schema,
    soft_delete = require('mongoose-softdelete');

const TestSchema = new Schema({
  somefield: { type: String, default: 'Hello World!' },
});

TestSchema.plugin(soft_delete);

mongoose.model('Test', TestSchema);

controllers/test.js

const Test = mongoose.model('Test');
const test = new Test();

test.softdelete(function (err, newTest) {
  if (err) {
    callback(err);
  }
  callback(null, newTest);
});

test.restore(function (err, newTest) {
  if (err) {
    callback(err);
  }
  callback(null, newTest);
});

// chainable query method
// defaults to true unless specified
Test.find().isDeleted(false).exec();

Typescript

import { Schema, model } from 'mongoose';
import softdelete, { ISoftDeletedDocument } from 'mongoose-softdelete';

interface ITestDocument extends ISoftDeletedDocument {
    somefield: string;
}

const TestSchema = new Schema({
    somefield: { type: String, default: 'Hello World!' }
});

TestSchema.plugin(softdelete);

const Test = model<ITestDocument>('Test', TestSchema);
const test1 = new Test();

test1.softdelete(function (err, newTest: ITestDocument) {
    // ...
});

// chainable query method
// defaults to true unless specified
(Test.find({}) as unknown as ISoftDeletedDocumentQuery).isDeleted(false)

Built with love in Dhaka, Bangladesh by Riyadh Al Nur