Seguindo o tutorial do MongoDB, Crie um Auto- Incrementando o campo de sequência , você precisa primeiro criar um
counters
separado coleção para rastrear a última sequência numérica usada. O _id
campo contém o nome da sequência, ou seja, o userID
campo na coleção de usuários e o seq
campo contém o último valor da sequência. Para começar, insira na coleção de contadores o valor inicial do
userID
:db.counter.insert(
{
"_id": "userID",
"seq": 0
}
)
Tendo preenchido a coleção de contadores, gere seu esquema no Mongoose:
var counterSchema = mongoose.Schema({
"_id": { "type": String, "required": true },
"seq": { "type": Number, "default": 0 }
});
var counter = mongoose.model('counter', counterSchema);
Em seguida, redefina seu esquema de usuário para que, quando você salvar um modelo de usuário, ele primeiro chame o
findByIdAndUpdate()
do modelo de contador para incrementar atomicamente o valor seq e retornar este novo valor que pode ser usado como o próximo userID
valor:var userSchema = mongoose.Schema({
"userID": { "type": String, "required": true },
"firstname": { "type": String },
"lastname": { "type": String },
// other properties ...
}, { "collection": "user" }
);
userSchema.pre("save", function (next) {
var doc = this;
counter.findByIdAndUpdate(
{ "_id": "userID" },
{ "$inc": { "seq": 1 } }
, function(error, counter) {
if(error) return next(error);
doc.userID = counter.seq.toString();
next();
});
});