This plugin allows you to auto-increment any field on any mongoose schema that you wish.
npm install @ed3ath/mongoose-auto-incrementautoIncrement.plugin to the plugin() function on your schema.
js
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
autoIncrement = require('mongoose-auto-increment');
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');
``
$3
``js
bookSchema.plugin(autoIncrement.plugin, { model: 'Book', field: 'bookId' });
``
$3
``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.
$3
``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(...)).
$3
``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
});
});
});
```