{"id":14975617,"url":"https://github.com/abslibs/mongoose-plugin","last_synced_at":"2026-03-07T14:03:46.741Z","repository":{"id":57094233,"uuid":"198260947","full_name":"abslibs/mongoose-plugin","owner":"abslibs","description":"NPM Library","archived":false,"fork":false,"pushed_at":"2020-10-18T15:12:51.000Z","size":336,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-11-22T22:14:13.148Z","etag":null,"topics":["createdat","destroy","mongoose","mongoose-paranoid","mongoose-plugin","overridden","plugin","remove","restore","softdelete","timestapms","updatedat"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/@abslibs/mongoose-plugin","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/abslibs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-07-22T16:15:15.000Z","updated_at":"2021-06-06T12:30:07.000Z","dependencies_parsed_at":"2022-08-22T23:10:07.688Z","dependency_job_id":null,"html_url":"https://github.com/abslibs/mongoose-plugin","commit_stats":null,"previous_names":["arpit-absyadav/mongoose-plugin"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/abslibs/mongoose-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abslibs%2Fmongoose-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abslibs%2Fmongoose-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abslibs%2Fmongoose-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abslibs%2Fmongoose-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abslibs","download_url":"https://codeload.github.com/abslibs/mongoose-plugin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abslibs%2Fmongoose-plugin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30216513,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T14:02:48.375Z","status":"ssl_error","status_checked_at":"2026-03-07T14:02:43.192Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["createdat","destroy","mongoose","mongoose-paranoid","mongoose-plugin","overridden","plugin","remove","restore","softdelete","timestapms","updatedat"],"created_at":"2024-09-24T13:52:17.579Z","updated_at":"2026-03-07T14:03:44.926Z","avatar_url":"https://github.com/abslibs.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mongoose Plugin\r\n\r\n@abslibs/mongoose-plugin is simple and lightweight plugin that enables some basic required functionality for mongoose. \r\n## Features\r\n\r\n- Soft Delete document using **destroy** method.\r\n\r\n| Methods and Fields                          | Description                                                       |\r\n| ------------------------------------------- | ----------------------------------------------------------------- |\r\n| [ **destroy()** ](#simple-usage)            | method on document (do not override standard **remove()** method) |\r\n| [ **destroyById()** ](#simple-usage)        | static method                                                     |\r\n| [ **deleted**](#simple-usage)               | (true-false) key on document                                      |\r\n| [ **deletedAt**](#save-time-of-deletion)    | Add key to store time of deletion                                 |\r\n| [ **deletedBy**](#who-has-deleted-the-data) | key to record who deleted document                                |\r\n\r\n- Restore deleted documents using **restore** method\r\n\r\n| Feature                                                                                | Description                                                        |\r\n| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |\r\n| [Bulk destroy and restore](#bulk-destroy-and-restore)                                  | Bulk Destroy                                                       |\r\n| [Option to override static methods](#examples-how-to-override-one-or-multiple-methods) | **count, countDocuments, find, findOne, findOneAndUpdate, update** |\r\n| [Disable model validation on destroy](#disable-model-validation-on-destroy)            | Disable Validation                                                 |\r\n| [Option to create index on destroy fields](#create-index-on-fields)                    | **deleted**, **deletedAt**, **deletedBy**                          |\r\n\r\n## Installation\r\n\r\nInstall using [npm](https://npmjs.org)\r\n\r\n```\r\nnpm install @abslibs/mongoose-plugin\r\n```\r\n\r\n## Usage\r\n\r\nWe can use this plugin with or without options.\r\n\r\n### Setup\r\n\r\n```javascript\r\nconst mongoose_plugin = require('@abslibs/mongoose-plugin');\r\n\r\nconst TestSchema = new Schema({\r\n  name: String\r\n});\r\n\r\n// Apply on specific model.\r\n// Can apply globally : eg: mongoose.plugin(mongoose_plugin, {})\r\nTestSchema.plugin(mongoose_plugin, {\r\n  paranoid: true,\r\n  timestamps: true,\r\n  createdAt: 'created_at',\r\n  updatedAt: 'updated_at'\r\n});\r\n\r\nconst Test = mongoose.model('Test', TestSchema);\r\n```\r\n\r\n### Options\r\n\r\n**paranoid** : it needs to be true for soft deletion.\r\n\r\n**timestamps** : it will add [createdAt \u0026 updatedAt] in schema.\r\n\r\n**createdAt** : can replace createdAt by given string. eg: _createdAt: 'created_at'_\r\n\r\n**updatedAt** : can replace updatedAt by given string. eg: _updatedAt: 'created_at'_\r\n\r\n### Simple usage\r\n\r\n```javascript\r\nconst test = new Test({ name: 'Test' });\r\ntest.save(function() {\r\n  test.destroy(function() {\r\n    // deleted: true\r\n    test.restore(function() {});\r\n    //deleted: false\r\n  });\r\n});\r\n\r\nvar exampleTestId = mongoose.Types.ObjectId('53da93b16b4a6670076b16bf');\r\n\r\n// INFO: Example usage of destroyById static method\r\nTest.destroyById(exampleTestId, function(err, TestDocument) {});\r\n```\r\n\r\n### Get sot soft deleted data.\r\n\r\n```javascript\r\n// pass *{ paranoid: false }* as option.\r\n// This will return response including deleted documents.\r\ntest.find({ name: 'Arpit' }, null, { paranoid: false }, (err, user) =\u003e {});\r\n```\r\n\r\n### Who has deleted the data?\r\n\r\n```javascript\r\nvar mongoose_plugin = require('@abslibs/mongoose-plugin');\r\n\r\nvar TestSchema = new Schema({\r\n  name: String\r\n});\r\n\r\nTestSchema.plugin(mongoose_plugin, { deletedBy: true });\r\nvar Test = mongoose.model('Test', TestSchema);\r\nvar test = new Test({ name: 'Test' });\r\ntest.save(function() {\r\n  // mongodb: { deleted: false, name: 'Test' }\r\n\r\n  var idUser = mongoose.Types.ObjectId('53da93b16b4a6670076b16bf');\r\n  test.destroy(idUser, function() {\r\n    // mongodb: { deleted: true, name: 'Test', deletedBy: ObjectId(\"53da93b16b4a6670076b16bf\")}\r\n    test.restore(function() {});\r\n  });\r\n});\r\n```\r\n\r\n### Bulk destroy and restore\r\n\r\n```javascript\r\n\r\nvar idUser = mongoose.Types.ObjectId(\"53da93b16b4a6670076b16bf\");\r\n\r\n// destroy multiple object, callback\r\nTest.destroy(function (err, result) { ... });\r\nTest.destroy({age:10}, function (err, result) { ... });\r\nTest.destroy({}, idUser, function (err, result) { ... });\r\nTest.destroy({age:10}, idUser, function (err, result) { ... });\r\n\r\n// destroy multiple object, promise\r\nTest.destroy().exec(function (err, result) { ... });\r\nTest.destroy({age:10}).exec(function (err, result) { ... });\r\nTest.destroy({}, idUser).exec(function (err, result) { ... });\r\nTest.destroy({age:10}, idUser).exec(function (err, result) { ... });\r\n\r\n// Restore multiple object, callback\r\nTest.restore(function (err, result) { ... });\r\nTest.restore({age:10}, function (err, result) { ... });\r\n\r\n// Restore multiple object, promise\r\nTest.restore().exec(function (err, result) { ... });\r\nTest.restore({age:10}).exec(function (err, result) { ... });\r\n```\r\n\r\n### Create index on fields\r\n\r\n```javascript\r\nTestSchema.plugin(mongoose_plugin, { indexFields: true });\r\n\r\n// Index only specific fields\r\nTestSchema.plugin(mongoose_plugin, {\r\n  indexFields: ['deleted', 'deletedBy']\r\n});\r\n// or\r\nTestSchema.plugin(mongoose_plugin, { indexFields: ['deletedAt'] });\r\n```\r\n\r\n### Method overridden\r\n\r\nWe have the option to override all standard methods or only specific methods. Overridden methods will exclude deleted documents from results, documents that have `deleted = true`. Every overridden method will have two additional methods, so we will be able to work with deleted documents.\r\n\r\n**NOTE :** Method will be overridden if **paranoid is true**\r\n\r\n| only not deleted documents |\r\n| -------------------------- |\r\n| count()                    |\r\n| find()                     |\r\n| findOne()                  |\r\n| findOneAndUpdate()         |\r\n| update()                   |\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabslibs%2Fmongoose-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabslibs%2Fmongoose-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabslibs%2Fmongoose-plugin/lists"}