Skip to content
This repository has been archived by the owner on Oct 30, 2023. It is now read-only.

Mongoose collections history using jsondiffpatch

License

Notifications You must be signed in to change notification settings

t4nz/mongoose-jsondiffpatch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mongoose-jsondiffpatch

Mongoose collections history using jsondiffpatch

npm GitHub license Codacy Badge npm TypeScript

Installation


yarn add mongoose-jsondiffpatch
npm i mongoose-jsondiffpatch

Operation


Each update will create a history record with jsonDiff of the change. This helps in tracking all the changes happened to an object from the beginning.

Following will be the structure of the diff history being saved:

diff Collection schema:

_id: ObjectId - mongo id of the diff object
collectionName: string - Name of the collection for which diff is saved
collectionId: ObjectId - Mongo Id of the collection being modified
diff: object - Diff object
user: any - User who modified
reason: string - Why the collection is modified
createdAt: Date
updatedAt: Date
_v: number

Setup


Use as you would any Mongoose plugin:

import * as mongoose from 'mongoose';
import mongooseJsondiff from 'mongoose-jsondiffpatch';

const schema = new mongoose.Schema({ ... });
schema.plugin(mongooseJsondiff, { mongoose });
const model = model('MyModel', schema);

The plugin also has an omit option which accepts either a string or array. This will omit the given keys from history. Follows dot syntax for deeply nested values.

import * as mongoose from 'mongoose';
import mongooseJsondiff from 'mongoose-jsondiffpatch';

const schema = new mongoose.Schema({
    someField: String,
    ignoredField: String,
    some: {
        deepField: String
    }
});

schema.plugin(diffHistory.plugin, { mongoose, omit: ['ignoredField', 'some.deepField'] });
...

API

getDiffs()

Returns raw histories created for a document.

async () => {
  try {
    import model from './myModel';
    // with optional query parameters
    const histories = await model.getDiffs(ObjectId, { select: 'diff user' });
    ...

getVersion()

Returns an older version of a document.

async () => {
  try {
    import model from './myModel';
    // with optional query parameters
    const version = await model.getVersion(ObjectId, version, { lean: true });
    ...

Credits

This plugin is inspired by mimani/mongoose-diff-history.

About

Mongoose collections history using jsondiffpatch

Resources

License

Stars

Watchers

Forks

Packages

No packages published