MongoDB không có auto-increment mặc định như SQL. Cách phổ biến: dùng collection counter + findAndModify.
Các bước thực hiện
1. Tạo collection counter
> db.createSequenceDemo.insertOne({_id: "SID", GiaTri: 0});
2. Tạo hàm lấy sequence tiếp theo
> function nextSequence(tenSequence) {
var doc = db.createSequenceDemo.findAndModify({
query: {_id: tenSequence},
update: {$inc: {GiaTri: 1}},
new: true
});
return doc.GiaTri;
}
3. Sử dụng khi insert document
> db.checkSequenceDemo.insertOne({"MaSinhVien": nextSequence("SID"), "TenSinhVien": "Larry", "DiemToan": 78});
> db.checkSequenceDemo.insertOne({"MaSinhVien": nextSequence("SID"), "TenSinhVien": "Mike", "DiemToan": 89});
> db.checkSequenceDemo.insertOne({"MaSinhVien": nextSequence("SID"), "TenSinhVien": "Sam", "DiemToan": 67});
Kết quả:
{ "MaSinhVien": 1, "TenSinhVien": "Larry", "DiemToan": 78 }
{ "MaSinhVien": 2, "TenSinhVien": "Mike", "DiemToan": 89 }
{ "MaSinhVien": 3, "TenSinhVien": "Sam", "DiemToan": 67 }
Lưu ý: findAndModify atomic đảm bảo tính nhất quán. new: true trả về document sau cập nhật. Pattern này dùng cho _id tùy chỉnh hoặc trường business key.