MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment définir une contrainte unique pour un champ dans un document imbriqué dans un tableau ?

Oui. Veuillez consulter les deux scénarios suivants concernant l'utilisation de l'index unique sur un champ de tableau avec des documents intégrés.

Index multiclé unique (index sur le champ de document intégré dans un tableau):


Premier scénario :

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

Les trois documents sont insérés sans aucune erreur.

Conformément à la note sur Unique Multikey Index , ci-dessus, le document avec _id : 3 a deux documents intégrés dans le tableau avec le même "array.id" valeur :3 .

De plus, l'unicité est appliquée sur deux clés de l'index composé { _id: 1, "array.id": 1} et il y avait un doublon "array.id" valeurs à travers les documents également (le _id valeurs 1 et 2 ).


Deuxième scénario :

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

Le premier document avec _id : 3 est inséré avec succès. Le second a une erreur :"errmsg" : "E11000 duplicate key error collection: test.arrays2 index: array.id_1 dup key: { array.id: 3.0 } " . Ce comportement est conforme à la note Unique Multikey Index .