# mongoose-sequential

> Mongoose Sequential

Latest version **1.2.0** (published 2021-11-04) · MIT license · 0 weekly downloads

## Install

```sh
npm install mongoose-sequential
pnpm add mongoose-sequential
yarn add mongoose-sequential
bun add mongoose-sequential
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.2.0 |
| Published | 2021-11-04 |
| First published | 2021-11-02 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 15.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Ben Lugavere |
| Maintainers | blugavere |
| Keywords | mongoose |

## Links

- npm: https://www.npmjs.com/package/mongoose-sequential
- Repository: https://github.com/giddyinc/mongoose-auto-increment
- Homepage: https://github.com/giddyinc/mongoose-auto-increment#readme
- Issues: https://github.com/giddyinc/mongoose-auto-increment/issues
- npm.io page: https://npm.io/package/mongoose-sequential

## Dependencies (1)

- [debug](https://npm.io/package/debug.md) 4.3.2

## Alternatives

- [angular-pipes](https://npm.io/package/angular-pipes.md) — 5.6K weekly downloads
- [@ng-web-apis/midi](https://npm.io/package/@ng-web-apis/midi.md) — 2.6K weekly downloads
- [happn-3](https://npm.io/package/happn-3.md) — 1.6K weekly downloads
- [@opensip-cli/lang-go](https://npm.io/package/@opensip-cli/lang-go.md) — 1.2K weekly downloads
- [mongoose-typescript](https://npm.io/package/mongoose-typescript.md) — 85 weekly downloads

## Recent versions

- 1.2.0 (latest) — 2021-11-04
- 1.1.0 — 2021-11-02

## README

[![Build Status](https://app.travis-ci.com/giddyinc/mongoose-sequential.svg?token=e2dvdSbhpoi933F8fQcB&branch=master)](https://app.travis-ci.com/giddyinc/mongoose-auto-increment)

# Boxed Mongoose Sequential Plugin

### Usage

```ts
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**.

```ts
// 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:
```ts
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`

---
_Source: https://npm.io/package/mongoose-sequential · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
