1.2.0 • Published 3 years ago

mongoose-sequential v1.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

Build Status

Boxed Mongoose Sequential Plugin

Usage

import { plugin as autoincPlugin } from 'mongoose-sequential';

// Create your schema
const DoggoSchema = new Schema({
    name: String,
    isGoodBoy: Boolean,
});

// Plug it in
DoggoSchema.plugin(autoincPlugin, {
    model: 'Doggo',
    connection,
    path: 'doggoid' // optional path for the auto incrementing gid. Defaults to "gid".
});

// ...

Compound keys

To create compound incrementing keys, you'll use the compoundKeys option. When using this setting you are responsible for creating the unique index and the fields.

// Create your schema
const BatSchema = new Schema({
    name: String,
    batType: String,
    // If the incrementing path is defined, mongoose-sequential will not override it. Make sure you create your own index for uniqueness.
    batNumber: Number,
});

// Plug it in
BatSchema.plugin(autoincPlugin, {
    model: 'Bat',
    connection,
    path: 'batNumber',
    compoundKeys: [ 'batType' ],
});

// Created for you if "autoCreateUniqueIndexes" is not false
BatSchema.index({
    batNumber: 1,
    batType: 1,
}, { unique: true });

// ...

console.log(await Bat.create({
    batType: 'vampire',
}, {
    batType: 'vampire',
}, {
    batType: 'fruit',
}));
/*
^^^^^^^^^^^^^
[{
    batType: 'vampire',
    batNumber: 1
}, {
    batType: 'vampire',
    batNumber: 2
}, {
    batType: 'fruit',
    batNumber: 1
}]
*/

Complex Compound Keys

You may also use more than one field with compoundKeys to create multi-key compound identities. This creates uniqueness for incrementing similar to the following index:

BatSchema.plugin(autoincPlugin, {
    model: 'Bat',
    connection,
    path: 'batNumber',
    compoundKeys: [ 'batType', 'batOwner' ],
});

// Created for you if "autoCreateUniqueIndexes" is not false
BatSchema.index({
    batNumber: 1,
    batType: 1,
    batOwner: 1,
}, { unique: true });

It's important to note that ordering does not matter on the compoundKeys array, except in the ordering of the automatic index creation. Ordering will not be preserved for incrementing, but will be preserved for index creation.

Options

  • model Required string The Model name present on the connection.
  • connection Required mongoose.Connection Connection to use with mongoose-sequential
  • path string Optional path that points to the path we'll increment (defaults to gid)
  • compoundKeys string[] Optional path that creates a compound incrementing identity
  • maxFakeIncrement number Optional number that adjusts the incrementing value
  • autoIncrementModelName string Optional model name for the counter collection
  • autoIncrementCollection string Optional collection name for the counter collection
  • autoCreateUniqueIndexes boolean Optionally turn off auto creation of unique indexes (defaults to true)

Debugging

Mongoose sequential utilizes debug. To print logs related to the plugin use the DEBUG environment variable: DEBUG=mongoose-sequential