Tạo compound unique index trên hai trường. Cú pháp:
> db.keepTwoColumnsUniqueDemo.createIndex(
{"StudentFirstName": 1, "StudentLastName": 1},
{ unique: true }
);
{ "createdCollectionAutomatically": true, "numIndexesBefore": 1, "numIndexesAfter": 2, "ok": 1 }
Thêm tài liệu
> db.keepTwoColumnsUniqueDemo.insertOne({"StudentFirstName": "John", "StudentLastName": "Smith", "StudentAge": 21});
{ "acknowledged": true, "insertedId": ObjectId("5cd30fd7b64f4b851c3a13e5") }
> db.keepTwoColumnsUniqueDemo.insertOne({"StudentFirstName": "John", "StudentLastName": "Doe", "StudentAge": 23});
{ "acknowledged": true, "insertedId": ObjectId("5cd30fe5b64f4b851c3a13e6") }
> db.keepTwoColumnsUniqueDemo.insertOne({"StudentFirstName": "John", "StudentLastName": "Smith", "StudentAge": 24});
WriteError: E11000 duplicate key error collection: sample.keepTwoColumnsUniqueDemo index: StudentFirstName_1_StudentLastName_1 dup key: { : "John", : "Smith" }
Lỗi trùng khóa vì cặp (John, Smith) đã tồn tại.
Kiểm tra dữ liệu hiện có
> db.keepTwoColumnsUniqueDemo.find().pretty();
Kết quả (chỉ 2 tài liệu):
{
"_id": ObjectId("5cd30fd7b64f4b851c3a13e5"),
"StudentFirstName": "John", "StudentLastName": "Smith", "StudentAge": 21
}
{
"_id": ObjectId("5cd30fe5b64f4b851c3a13e6"),
"StudentFirstName": "John", "StudentLastName": "Doe", "StudentAge": 23
}
Giải thích: Unique compound index đảm bảo sự kết hợp (StudentFirstName, StudentLastName) là duy nhất. Các trường riêng lẻ có thể trùng.