auto-increment-group

1.1.0 • Public • Published

mongoose auto incremente

  • Mongoose plugin that auto increments any ID field on your schema when a document is saved for the first time.
  1. installation.
  2. Getting Started.

installation

npm install auto-increment-group

Getting Started

import mongoose from 'mongoose';
import { autoInc } from 'auto-increment-group';

const schema = new mongoose.Schema({
    serialNumber: {
        type: String
    },
    name: {
        type: String
    },
    company: {
        type: String
    },
}, {
    timestamps: true
});

const Document = connection.model('Document', schema);

schema.plugin(autoInc, {
    field: "serialNumber",
    groupBy: 'company',
    digits: 4,
    startAt: 1,
    incrementBy: 1,
    unique: false
});

let document1_1 = new Document({ name: 'document1_1', company: '1'});
let document1_2 = new Document({ name: 'document1_2', company: '1'});
let document2_1 = new Document({ name: 'document2_1', company: '2'});

await document1_1.save() // { serialNumber: "0001", name: 'document1_1', company: '1' }
await document1_2.save() // { serialNumber: "0002", name: 'document1_2', company: '1' }
await document2_1.save() // { serialNumber: "0001", name: 'document2_1', company: '2' }

Plugin Options

Option Type Default Descripción
field String id field to increment.
digits Number 5 field size to increment.
startAt Number 0 value with which the count begins.
incrementBy Number 1 count increment.
unique Boolean false Create a unique index using the "field" and "groupBy".
groupBy string / Array Field by which different increments can be carried.

The "Group by" field is optional, if it is not present, the auto increment will be applied to all documents in the schema

Multiple group by

import mongoose from 'mongoose';
import { autoInc } from 'auto-increment-group';

const schema = new mongoose.Schema({
    serialNumber: {
        type: String
    },
    name: {
        type: String
    },
    company: {
        type: String
    },
    floor: {
        type: String
    }
}, {
    timestamps: true
});

const Document = connection.model('Document', schema);

schema.plugin(autoInc, {
    field: "serialNumber",
    groupBy: ['company',  'floor'],
    digits: 4,
    startAt: 1,
    incrementBy: 1,
    unique: false
});

let document1 = new Document({ name: 'document1C1F1', company: '1', floor: '1'});
let document2 = new Document({ name: 'document2C1F1', company: '1', floor: '1'});
let document3 = new Document({ name: 'document1C1F2', company: '1', floor: '2'});
let document4 = new Document({ name: 'document1C2F1', company: '2', floor: '1'});

await document1.save() // { serialNumber: "0001", name: 'document1C1F1', company: '1', floor: '1' }
await document2.save() // { serialNumber: "0002", name: 'document2C1F1', company: '1', floor: '1' }
await document3.save() // { serialNumber: "0001", name: 'document1C1F2', company: '2', floor: '2' }
await document4.save() // { serialNumber: "0001", name: 'document1C2F1', company: '2', floor: '1' }

NextCount

nextCount is both a static method on the model and an instance method on the document. If the groupBy option is present, for the static function, the discriminant must be passed as a parameter

if the groupBy is multiple, an object must be passed with the discriminates

The nextCount function returns a promise

let document1 = new Document({ name: 'document1_1', company: '1'});
await document.nextCount();

await Document.nextCount('1');
await Document.nextCount('2');
await Document.nextCount({
    company: '1', 
    floor: '1'
});

// A mongoose session may be passed to the static method as a second parameter.
const session = await mongoose.connection.startSession();
session.startTransaction();

await Document.nextCount('1', session);
await Document.nextCount('2', session);
await Document.nextCount({
    company: '1', 
    floor: '1'
}, session);

resetCount

resetCount is static method on the model. The reset function can receive a discriminant as a parameter, which will only reset the count belonging to the discriminant

if the groupBy is multiple, an object must be passed with the discriminates

The resetCount function returns a promise

await Document.resetCount();
await Document.resetCount('1');
await Document.resetCount({
    company: '1',
    floor: '1'
});


// A mongoose session may be passed as a second parameter.
const session = await mongoose.connection.startSession();
session.startTransaction();


await Document.resetCount(session);
await Document.resetCount('1', session);
await Document.resetCount({
    company: '1',
    floor: '1'
}, session);

Package Sidebar

Install

npm i auto-increment-group

Weekly Downloads

22

Version

1.1.0

License

ISC

Unpacked Size

31.5 kB

Total Files

7

Last publish

Collaborators

  • servandof