MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come impostare un vincolo univoco per il campo nel documento nidificato nell'array?

Sì. Consulta i due scenari seguenti sull'utilizzo dell'indice univoco su un campo matrice con documenti incorporati.

Indice multichiave unico (indice sul campo del documento incorporato all'interno di un array):


Primo 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"} ] } )

Tutti e tre i documenti vengono inseriti senza errori.

Come da nota su Unique Multikey Index , sopra, il documento con _id : 3 ha due documenti incorporati all'interno dell'array con lo stesso "array.id" valore:3 .

Inoltre, l'univocità viene applicata su due chiavi dell'indice composto { _id: 1, "array.id": 1} e c'erano "array.id" duplicati anche i valori nei documenti ( _id valori 1 e 2 ).


Secondo 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" } ] } )

Il primo documento con _id : 3 viene inserito correttamente. Il secondo ha un errore:"errmsg" : "E11000 duplicate key error collection: test.arrays2 index: array.id_1 dup key: { array.id: 3.0 } " . Questo comportamento è come previsto secondo la nota Unique Multikey Index .