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