Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Cách giữ hai "cột" duy nhất (unique) trong MongoDB

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.