Ja. Zie de volgende twee scenario's over het gebruik van de unieke index op een matrixveld met ingesloten documenten.
Unieke multikey-index (index op ingesloten documentveld binnen een array):
Eerste scenario:
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"} ] } )
Alle drie de documenten worden zonder fouten ingevoegd.
Volgens de opmerking over Unieke Multikey Index , hierboven, het document met _id : 3
heeft twee ingesloten documenten in de array met dezelfde "array.id"
waarde:3
.
De uniciteit wordt ook afgedwongen op twee sleutels van de samengestelde index { _id: 1, "array.id": 1}
en er waren dubbele "array.id"
waarden in de documenten ook ( de _id
waarden 1
en 2
).
Tweede scenario:
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" } ] } )
Het eerste document met _id : 3
wordt met succes ingevoegd. De tweede heeft een fout:"errmsg" : "E11000 duplicate key error collection: test.arrays2 index: array.id_1 dup key: { array.id: 3.0 } "
. Dit gedrag is zoals verwacht volgens de opmerking Unique Multikey Index .