Đúng. Vui lòng xem hai trường hợp sau về cách sử dụng chỉ mục duy nhất trên trường mảng có tài liệu nhúng.
Chỉ mục nhiều khóa duy nhất (chỉ mục trên trường tài liệu được nhúng trong một mảng):
Tình huống đầu tiên:
db.arrays.createIndex( { _id: 1, "array.id": 1}, { unique: true } )
db.arrays.insertOne( { "_id": 1, "array": [ { "id": 1, "content": "11"}, { "id": 2, "content": "22"} ] } )
db.arrays.insertOne( { "_id": 2, "array": [ { "id": 1, "content": "1100"}, { "id": 5, "content": "55"} ] } )
db.arrays.insertOne( {"_id": 3, "array": [ {"id": 3, "content": "33"}, {"id": 3, "content": "3300"} ] } )
Tất cả ba tài liệu được chèn mà không có bất kỳ lỗi nào.
Theo ghi chú về Chỉ mục nhiều khóa duy nhất , ở trên, tài liệu có _id : 3
có hai tài liệu được nhúng trong mảng có cùng "array.id"
giá trị:3
.
Ngoài ra, tính duy nhất được thực thi trên hai khóa của chỉ mục ghép { _id: 1, "array.id": 1}
và có "array.id"
trùng lặp cũng có giá trị trên các tài liệu (_id
giá trị 1
và 2
).
Tình huống thứ hai:
db.arrays2.createIndex( { "array.id": 1 }, { unique: true } )
db.arrays2.insertOne( { "_id": 3, "array": [ { "id": 3, "content": "33" }, { "id": 3, "content": "330"} ] } )
db.arrays2.insertOne( { "_id": 4, "array": [ { "id": 3, "content": "331" }, { "id": 30, "content": "3300" } ] } )
Tài liệu đầu tiên có _id : 3
được chèn thành công. Cái thứ hai có lỗi:"errmsg" : "E11000 duplicate key error collection: test.arrays2 index: array.id_1 dup key: { array.id: 3.0 } "
. Hành vi này diễn ra như mong đợi theo ghi chú Chỉ mục nhiều khóa duy nhất .