Tạo chỉ mục duy nhất (Unique Index) để ngăn chặn trùng lặp
Để loại bỏ các bản ghi trùng lặp trong MongoDB, bạn có thể thiết lập ràng buộc unique: true khi tạo chỉ mục. Tùy chọn dropDups: true (đã không còn được hỗ trợ từ MongoDB 3.0+) sẽ tự động xóa các bản ghi trùng lặp hiện có khi tạo chỉ mục.
Cú pháp
db.tenCollection.createIndex({ tenTruong: 1 }, { unique: true })
Lưu ý: Từ MongoDB 3.0, tùy chọn dropDups đã bị loại bỏ. Thay vào đó, bạn nên xóa thủ công các bản ghi trùng lặp trước khi tạo chỉ mục duy nhất.
Ví dụ minh họa
> db.demo604.createIndex({ FirstName: 1 }, { unique: true });
{
"createdCollectionAutomatically": true,
"numIndexesBefore": 1,
"numIndexesAfter": 2,
"ok": 1
}
> db.demo604.insertOne({ FirstName: "Chris" });
{ "acknowledged": true, "insertedId": ObjectId("5e960887ed011c280a0905d8") }
> db.demo604.insertOne({ FirstName: "Bob" });
{ "acknowledged": true, "insertedId": ObjectId("5e96088aed011c280a0905d9") }
> db.demo604.insertOne({ FirstName: "David" });
{ "acknowledged": true, "insertedId": ObjectId("5e96088ded011c280a0905da") }
> db.demo604.insertOne({ FirstName: "Chris" });
// Lỗi: E11000 duplicate key error collection: test.demo604 index: FirstName_1 dup key: { : "Chris" }
Kiểm tra dữ liệu
> db.demo604.find();
Kết quả:
{ "_id": ObjectId("5e960887ed011c280a0905d8"), "FirstName": "Chris" }
{ "_id": ObjectId("5e96088aed011c280a0905d9"), "FirstName": "Bob" }
{ "_id": ObjectId("5e96088ded011c280a0905da"), "FirstName": "David" }
Chỉ mục duy nhất đảm bảo không có hai bản ghi nào có cùng giá trị FirstName.