Skip to content

Instantly share code, notes, and snippets.

@vanbungkring
Created January 5, 2017 07:45
Show Gist options
  • Save vanbungkring/4cc2f7ca3ea4b45759b174484b14ac67 to your computer and use it in GitHub Desktop.
Save vanbungkring/4cc2f7ca3ea4b45759b174484b14ac67 to your computer and use it in GitHub Desktop.
auto increment mongoose
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
module.exports = function(schema, options) {
var options = options || {};
options.name = options.name || 'generic';
options.field = options.field || 'transactionId';
var counterSchema = new Schema({
name: String,
counter: Number
});
var CounterModel = mongoose.model('counters', counterSchema);
schema.pre('save', function(next) {
if (!this.isNew) {
return next();
}
var self = this;
CounterModel.findOneAndUpdate({
name: options.name
}, {
$inc: {
counter: 1
}
}, {
upsert: true
}, function(err, counter) {
if (err) {
return next(err)
};
self.set(options.field, counter.counter);
next();
});
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment