MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

come inserire il numero di incremento automatico con la mia collezione di mangusta

Seguendo il tutorial di MongoDB, Crea un Campo sequenza incrementale , devi prima creare un separato counters raccolta per tenere traccia dell'ultima sequenza numerica utilizzata. Il _id il campo contiene il nome della sequenza, ovvero il userID campo nella raccolta utente e il seq contiene l'ultimo valore della sequenza.

Per cominciare, inserisci nella collezione contatori il valore iniziale per il userID :

db.counter.insert(
   {
      "_id": "userID",
      "seq": 0
   }
)

Dopo aver popolato la raccolta contatori, genera il suo schema in Mongoose:

var counterSchema = mongoose.Schema({
    "_id": { "type": String, "required": true },
    "seq": { "type": Number, "default": 0 }
});

var counter = mongoose.model('counter', counterSchema);

Quindi ridefinisci il tuo schema utente in modo che, quando salvi un modello utente, chiami prima il findByIdAndUpdate() del modello contatore. metodo per incrementare atomicamente il valore seq e restituire questo nuovo valore che può quindi essere utilizzato come il prossimo userID valore:

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