Siguiendo el tutorial de MongoDB, Crear un Auto- Campo de secuencia incremental
, primero debe crear un counters
separado colección para realizar un seguimiento de la última secuencia numérica utilizada. El _id
El campo contiene el nombre de la secuencia, es decir, el userID
campo en la colección de usuarios y el seq
El campo contiene el último valor de la secuencia.
Para empezar, inserte en la colección de contadores el valor inicial para el userID
:
db.counter.insert(
{
"_id": "userID",
"seq": 0
}
)
Habiendo llenado la colección de contadores, genere su esquema en Mongoose:
var counterSchema = mongoose.Schema({
"_id": { "type": String, "required": true },
"seq": { "type": Number, "default": 0 }
});
var counter = mongoose.model('counter', counterSchema);
Luego, redefina su esquema de usuario para que cuando guarde un modelo de usuario, primero llame al findByIdAndUpdate()
del modelo de contador. método para incrementar atómicamente el valor de secuencia y devolver este nuevo valor que luego se puede usar como el siguiente 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();
});
});