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

Tạo trường duy nhất (unique) trong MongoDB

Để đả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 error sẽ 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ùng partialFilterExpression nếu muốn bắt buộc not null