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

historical

v2.0.0

Published

A Mongoose plugin that archives document diffs and manages document history.

Downloads

311

Readme

Build Status Historical

A Mongoose plugin that archives document diffs and manages document history.

Historical requires a primary key (typically _id) to be present in your schema.

Installation

npm install historical@^2.0.0

Getting Started

Attach the plugin to your schema with any of these optional configuration parameters:

  • name: Provide a collection name. Defaults to <collection>_historicals.
  • connection: Provide a mongoose connection for the historical collection. Defaults to your schema's connection.
  • primaryKeyName: Provide your schema's primary key name. Defaults to _id.
  • primaryKeyType: Provide your schema's primary key type. Defaults to your schema's primary key field configuration.
  • ignore: An array of field names to ignore. Fields included in this list will not be stored in history.
var mongoose  = require('mongoose'),
ExampleSchema = new mongoose.Schema({
    myField: String,
    ignoredField: String,
    anotherIgnoredField: String
});

ExampleSchema.plugin(require('historical'), {
    connection: mongoose.createConnection('mongodb://localhost/example'),
    name: null,
    primaryKeyName: null,
    primaryKeyType: null,
    ignore: ['ignoredField', 'anotherIgnoredField']
});

Document #historicalDetails()

List historical documents up to the given date for a document.

myDocument.historicalDetails(new Date('2010-08-17T12:09:36'), function(e, objs){
   //the list of historical changes for my document
   console.log(objs);
});

Document #historicalRestore()

Returns a document as it was at the given date.

myDocument.historicalRestore(new Date('2010-08-17T12:09:36'), function(e, obj){
   //my document as it was in 2010
   //or null, if it either had not yet been created or was deleted before this time
   if(obj) {
      obj.save();
   }
});

Document #historicalTrim()

Creates a new historical document by flattening history up to the given date, and deletes the touched historical documents. Useful for pruning or establishing a maximum history retention period.

myDocument.historicalTrim(new Date('2010-08-17T12:09:36'), function(e, obj){
   //any history before this time has been flattened into one historical document
   //my document as it was provided
   console.log(obj);
});

Document #historicalSnapshot()

Take a complete and current snapshot of my document and store it in history. Unmodified documents only.

myDocument.historicalSnapshot(function(e, obj){
   //my document as it was provided
   console.log(obj);
});

Document #historicalClear()

Clear all history for my document and take a snapshot. Unmodified documents only.

myDocument.historicalClear(function(e, obj){
   //my document as it was provided
   console.log(obj);
});