Следвайки урока за MongoDB, Създайте автоматично Увеличаване на полето за последователност
, първо трябва да създадете отделни counters
колекция за проследяване на последната използвана числова последователност. _id
полето съдържа името на последователността, т.е. userID
поле в потребителската колекция и seq
полето съдържа последната стойност на последователността.
Като начало вмъкнете в колекцията от броячи първоначалната стойност за userID
:
db.counter.insert(
{
"_id": "userID",
"seq": 0
}
)
След като попълните колекцията от броячи, генерирайте нейната схема в Mongoose:
var counterSchema = mongoose.Schema({
"_id": { "type": String, "required": true },
"seq": { "type": Number, "default": 0 }
});
var counter = mongoose.model('counter', counterSchema);
След това предефинирайте вашата потребителска схема, така че когато запишете потребителски модел, той първо извиква findByIdAndUpdate()
на модела на брояча метод за атомно увеличаване на стойността на seq и връщане на тази нова стойност, която след това може да се използва като следващ userID
стойност:
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();
});
});