Efter MongoDB-selvstudiet, Opret en auto- Inkrementerende sekvensfelt
, skal du først oprette en separat counters
samling for at spore den sidst anvendte nummersekvens. _id
feltet indeholder sekvensnavnet, dvs. userID
feltet i brugersamlingen og seq
feltet indeholder den sidste værdi af sekvensen.
Til at starte med skal du indsætte startværdien for userID
i tællersamlingen :
db.counter.insert(
{
"_id": "userID",
"seq": 0
}
)
Efter at have udfyldt tællersamlingen, generer dens skema i Mongoose:
var counterSchema = mongoose.Schema({
"_id": { "type": String, "required": true },
"seq": { "type": Number, "default": 0 }
});
var counter = mongoose.model('counter', counterSchema);
Omdefiner derefter dit brugerskema, så det, når du gemmer en brugermodel, først kalder tællermodellens findByIdAndUpdate()
metode til at atomisk øge seq-værdien og returnere denne nye værdi, som derefter kan bruges som den næste userID
værdi:
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();
});
});