Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/eliurkis/mongoose-autoincrement-model
https://github.com/eliurkis/mongoose-autoincrement-model
Last synced: 11 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/eliurkis/mongoose-autoincrement-model
- Owner: eliurkis
- License: mit
- Created: 2018-03-03T06:44:59.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2018-03-03T06:52:27.000Z (almost 7 years ago)
- Last Synced: 2024-12-04T09:26:51.125Z (19 days ago)
- Language: JavaScript
- Size: 6.84 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# mongoose-autoincrement-model
> Mongoose plugin that auto-increments any ID field on your schema every time a document is saved.
## Getting Started
> npm install mongoose-auto-increment
Once you have the plugin installed it is very simple to use. Just get reference to it, initialize it by passing in your
mongoose connection and pass `autoIncrement.plugin` to the `plugin()` function on your schema.> Note: You only need to initialize MAI once.
````js
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
autoIncrement = require('mongoose-autoincrement-model');var connection = mongoose.createConnection("mongodb://localhost/myDatabase");
autoIncrement.initialize(connection);
var bookSchema = new Schema({
author: { type: Schema.Types.ObjectId, ref: 'Author' },
title: String,
genre: String,
publishDate: Date
});bookSchema.plugin(autoIncrement.plugin, 'Book');
var Book = connection.model('Book', bookSchema);
````That's it. Now you can create book entities at will and they will have an `_id` field added of type `Number` and will automatically increment with each new document. Even declaring references is easy, just remember to change the reference property's type to `Number` instead of `ObjectId` if the referenced model is also using the plugin.
````js
var authorSchema = new mongoose.Schema({
name: String
});
var bookSchema = new Schema({
author: { type: Number, ref: 'Author' },
title: String,
genre: String,
publishDate: Date
});
bookSchema.plugin(autoIncrement.plugin, 'Book');
authorSchema.plugin(autoIncrement.plugin, 'Author');
````### Want a field other than `_id`?
````js
bookSchema.plugin(autoIncrement.plugin, { model: 'Book', field: 'bookId' });
````### Want that field to start at a different number than zero or increment by more than one?
````js
bookSchema.plugin(autoIncrement.plugin, {
model: 'Book',
field: 'bookId',
startAt: 100,
incrementBy: 100
});
````Your first book document would have a `bookId` equal to `100`. Your second book document would have a `bookId` equal to `200`, and so on.
### Want to know the next number coming up?
````js
var Book = connection.model('Book', bookSchema);
Book.nextCount(function(err, count) {// count === 0 -> true
var book = new Book();
book.save(function(err) {// book._id === 0 -> true
book.nextCount(function(err, count) {
// count === 1 -> true
});
});
});
````nextCount is both a static method on the model (`Book.nextCount(...)`) and an instance method on the document (`book.nextCount(...)`).
### Want to reset counter back to the start value?
````js
bookSchema.plugin(autoIncrement.plugin, {
model: 'Book',
field: 'bookId',
startAt: 100
});var Book = connection.model('Book', bookSchema),
book = new Book();book.save(function (err) {
// book._id === 100 -> true
book.nextCount(function(err, count) {
// count === 101 -> true
book.resetCount(function(err, nextCount) {
// nextCount === 100 -> true
});
});
});
````