Không như những Hệ quản trị CSDL khác như MySQL, PostgreSQL,… MongoDB không có khái niệm Auto-Increment. Mỗi một bản ghi khi được thêm vào CSDL sẽ có 1 object ID với các ký tự ngẫu nhiên (Hoặc theo 1 quy tắc do MongoDB định nghĩa)
Bài viết này sẽ hướng dẫn cách tạo một trường tự động tăng (Auto-Increment Field) trong MongoDB
Sử dụng counters collection
Ý nghĩa của cách này là tạo 1 bảng để lưu lại giá trị tăng dần của ID.
Ví dụ: Tạo bảng users có trường _id là số tư nhiên tự tăng
Mở Mongo Shell để thực hiện các bước sau:
Bước 1: Tạo bảng counters bằng việc thêm 1 bản ghi có cấu trúc object như sau:
db.counters.insert( { _id: "userid", seq: 0 } )
Bước 2: Tạo hàm javascript để lấy ID tiếp theo (Cú paste function này vào Mongo Shell)
function getNextSequence(name) { var ret = db.counters.findAndModify( { query: { _id: name }, update: { $inc: { seq: 1 } }, new: true } ); return ret.seq; }
Bước 3: Xác nhận bằng việc thêm dữ liệu cho bảng users như sau
db.users.insert( { _id: getNextSequence("userid"), name: "Nguyen Van A" } ) db.users.insert( { _id: getNextSequence("userid"), name: "Nguyen Van B" } )
Kết quả:
Chú ý: Để tạo thêm trường Auto-Increment cho bảng khác ví dụ bảng products chẳng hạn. Chúng ta thêm 1 bản ghi vào bảng counters với trường _id: “productid”, rồi thêm dữ liệu cho bảng products giống như là:
db.products.insert( { _id: getNextSequence("productid"), name: "Máy hàn" } )
Lưu ý: MongoDB khuyên chúng ta nếu không cần thiết thì không nên tạo auto-increment.
Generally in MongoDB, you would not use an auto-increment pattern for the _id field, or any field, because it does not scale for databases with large numbers of documents. Typically the default value ObjectId is more ideal for the _id.
Nguồn: vinasupport.com