En suivant le tutoriel MongoDB, Create an Auto- Champ de séquence d'incrémentation
, vous devez d'abord créer un counters
séparé collection pour suivre la dernière séquence de numéros utilisée. Le _id
le champ contient le nom de la séquence c'est-à-dire le userID
champ dans la collection de l'utilisateur et le seq
champ contient la dernière valeur de la séquence.
Pour commencer, insérez dans la collection counters la valeur initiale du userID
:
db.counter.insert(
{
"_id": "userID",
"seq": 0
}
)
Après avoir renseigné la collection counters, générez son schéma dans Mongoose :
var counterSchema = mongoose.Schema({
"_id": { "type": String, "required": true },
"seq": { "type": Number, "default": 0 }
});
var counter = mongoose.model('counter', counterSchema);
Ensuite, redéfinissez votre schéma utilisateur de sorte que lorsque vous enregistrez un modèle utilisateur, il appelle d'abord le findByIdAndUpdate()
du modèle de compteur méthode pour incrémenter atomiquement la valeur seq et renvoyer cette nouvelle valeur qui peut ensuite être utilisée comme prochain userID
valeur :
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();
});
});