Để đảm bảo một trường không có giá trị trùng lặp, tạo index với tùy chọn unique: true. MongoDB sẽ tự động từ chối các insert/update vi phạm ràng buộc này.
Tạo unique index
> db.demo82.createIndex({"EmployeeName":1}, {unique:true});
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Thử chèn dữ liệu
> db.demo82.insertOne({"EmployeeName":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2bfb1b71bf0181ecc422a0") }
> db.demo82.insertOne({"EmployeeName":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2bfb1f71bf0181ecc422a1") }
> db.demo82.insertOne({"EmployeeName":"Chris"});
2020-01-25T13:54:00.410+0530 E QUERY [js] WriteError: E11000 duplicate key error collection: test.demo82 index: EmployeeName_1 dup key: { : "Chris" }
Xem dữ liệu (chỉ 2 document thành công)
> db.demo82.find();
{ "_id" : ObjectId("5e2bfb1b71bf0181ecc422a0"), "EmployeeName" : "Chris" }
{ "_id" : ObjectId("5e2bfb1f71bf0181ecc422a1"), "EmployeeName" : "David" }
Lưu ý quan trọng:
- Unique index tự tạo index trên trường đó (không cần tạo index riêng trước)
- Lỗi
E11000 duplicate key errorsẽ ném ra khi vi phạm - Có thể tạo unique index compound (nhiều trường):
createIndex({field1:1, field2:1}, {unique:true}) - Unique index cũng cho phép giá trị
null(mặc định), dùngpartialFilterExpressionnếu muốn bắt buộc not null