This plugin provides a new Schema Type, ShortId, that can be used in place of ObjectId. The generated IDs are random url-safe strings of configurable length, represented in a configurable base (10, 16, 32, 36, 62, 64 only).
This plugin will automatically retry inserts on a collision.
var mongoose = require('mongoose');
var ShortId = require('mongoose-shortid');
var personSchema = mongoose.Schema({
_id: ShortId,
name: String
});
The default options are:
var personSchema = mongoose.Schema({
_id: {
type: ShortId,
len: 7, // Length 7 characters
base: 64, // Web-safe base 64 encoded string
alphabet: undefined // Use default alphabet for base
retries: 4 // Four retries on collision
},
name: String
});
A custom alphabet can be provided using the alphabet
option. This takes priority over the base
argument.
var personSchema = mongoose.Schema({
_id: {
type: ShortId,
len: 9,
alphabet: 'fubar'
}
});
The generated IDs will be 9 characters long with only the characters f
u
b
a
and r
.
A custom ID generator function can be provided by setting the generator
option. This function will be called with two arguments: generatorOptions
and callback
.
The generatorOptions
is made up from the generatorOptions
object in the field options (if set), with len
, base
and alphabet
overriden if set on the field options.
The callback
function expects to be called with err
and id
parameters.
Here's an example:
var mongoose = require('mongoose');
var ShortId = require('mongoose-shortid');
function customIdGenerator(options, callback) {
var desiredLength = options.len || 7;
var base = options.base || 64;
var alphabet = options.alphabet || alphabetForBase(base);
var customOption = options.customOption;
// do Id generation
var generatedId = ...;
if (generatedId) {
callback(null, generatedId);
} else {
callback(err);
}
}
var exampleSchema = mongoose.Schema({
_id: {
type: ShortId,
len:4,
generator: customIdGenerator,
generatorOptions: { customOption: 'foo' }
},
name: String
});