Ja. Bitte sehen Sie sich die folgenden zwei Szenarien zur Verwendung des eindeutigen Index für ein Array-Feld mit eingebetteten Dokumenten an.
Eindeutiger Multikey-Index (Index auf eingebettetes Dokumentfeld innerhalb eines Arrays):
Erstes Szenario:
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 drei Dokumente werden ohne Fehler eingefügt.
Gemäß dem Hinweis zum Unique Multikey Index , oben, das Dokument mit _id : 3
hat zwei eingebettete Dokumente innerhalb des Arrays mit derselben "array.id"
Wert:3
.
Außerdem wird die Eindeutigkeit für zwei Schlüssel des zusammengesetzten Index { _id: 1, "array.id": 1}
erzwungen und es gab doppelte "array.id"
-Werte auch über die Dokumente hinweg (die _id
Werte 1
und 2
).
Zweites Szenario:
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" } ] } )
Das erste Dokument mit _id : 3
wird erfolgreich eingefügt. Der zweite hat einen Fehler:"errmsg" : "E11000 duplicate key error collection: test.arrays2 index: array.id_1 dup key: { array.id: 3.0 } "
. Dieses Verhalten ist gemäß dem Hinweis Unique Multikey Index wie erwartet .