npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mongoose-soft-deleting

v1.0.1

Published

Package for operating soft delete on mongoose models

Downloads

9

Readme

Package: mongoose-soft-deleting

Package for operating soft delete on mongoose models

Install

npm i mongoose-soft-deleting

Usage

By default the plugin include two new fields in the schema to which you want to apply it: _deleted, _deletedAt. Which answer to the questions 'Is the document deleted ?' and 'When has been the document deleted ?'. Optionally you can specify a _deletedBy field too to answer the question 'Who deleted it?'.

The package provide a middleware hook too for intercepting the pre soft deleting.

Example without user

  const softDeletePlugin = require('mongoose-soft-deleting');

  // ...

  const TestSchema = new mongoose.Schema({
    A: { type: String, default: 'A' },
    B: { type: String, default: 'B' },
  });

  TestSchema.plugin(softDeletePlugin,
    {
        deleted: {
            // Optional mongoose field options
            ... deletedOptions
        },

        deletedAt: {
            // Optional mongoose field options
            ... deletedAtOptions
            // Example
            default: Date.now
        }
    }
  );

  const TestModel = mongoose.model('Test', TestSchema);

  // ...

  // Pre save
  TestSchema.preSoftDelete(async function(doc){
      // Document is trying to be soft deleted
  })

  // ...

  const doc = await TestModel.findOne(...);

  // To soft delete
  await doc.softDelete(true);

  // To restore from soft delete
  await doc.softDelete(false);

  // To completely remove: call it twice
  await doc.softDelete(true);
  await doc.softDelete(true);

  // or
  await doc.remove();

  // To know if it is deleted
  const isDeleted = doc.isSoftDeleted() || doc._deleted;

  // To know when
  const deletedAt = doc._deletedAt;

Example with user

const softDeletePlugin = require('mongoose-soft-deleting');

// ...

const TestSchema = new mongoose.Schema({
  A: { type: String, default: 'A' },
  B: { type: String, default: 'B' },
});

const UserTestSchema = new mongoose.Schema({
  name: { type: String, default: 'Name' },
  password: { type: String, default: '🤫' },
});

TestSchema.plugin(softDeletePlugin, {
  deletedBy: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'UserTest',
    required: false,
  },
});

const TestModel = mongoose.model('Test', TestSchema);
const UserTestModel = mongoose.model('UserTest', UserTestSchema);

// ...

const user = UserTestModel.findById(...);
const test = TestModel.findById(...);

test.softDelete(true, user);

Test

You can try the tests using the following command ( before you need to change the connection to MongoDB ) :

npm run test