Làm theo hướng dẫn MongoDB, Tạo Auto- Trường trình tự tăng dần
, trước tiên bạn cần tạo một counters
riêng biệt bộ sưu tập để theo dõi dãy số cuối cùng được sử dụng. _id
trường chứa tên trình tự, tức là userID
trường trong bộ sưu tập người dùng và seq
trường chứa giá trị cuối cùng của chuỗi.
Để bắt đầu, hãy chèn vào bộ sưu tập giá trị ban đầu cho userID
:
db.counter.insert(
{
"_id": "userID",
"seq": 0
}
)
Sau khi điền bộ sưu tập bộ đếm, hãy tạo giản đồ của nó trong Mongoose:
var counterSchema = mongoose.Schema({
"_id": { "type": String, "required": true },
"seq": { "type": Number, "default": 0 }
});
var counter = mongoose.model('counter', counterSchema);
Sau đó, xác định lại giản đồ người dùng của bạn để khi bạn lưu mô hình người dùng, lần đầu tiên nó gọi findByIdAndUpdate()
của mô hình bộ đếm để tăng nguyên tử giá trị seq và trả về giá trị mới này sau đó có thể được sử dụng làm userID
tiếp theo giá trị:
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();
});
});