MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie setze ich eine eindeutige Einschränkung für ein Feld in einem Dokument, das in einem Array verschachtelt ist?

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 .