MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

comment insérer un numéro d'auto-incrémentation avec ma collection de mangoustes

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();
    });
});