sql >> Base de Datos >  >> NoSQL >> MongoDB

cómo insertar un número de autoincremento con mi colección de mongoose

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