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

Hvordan indstilles en unik begrænsning for felt i dokument indlejret i array?

Ja. Se venligst følgende to scenarier om brug af det unikke indeks på et matrixfelt med indlejrede dokumenter.

Unikt multikey-indeks (indeks på indlejret dokumentfelt i et array):


Første scenarie:

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 de tre dokumenter indsættes uden fejl.

I henhold til bemærkningen om Unique Multikey Index , ovenfor, dokumentet med _id : 3 har to indlejrede dokumenter i arrayet med samme "array.id" værdi:3 .

Entydigheden håndhæves også på to nøgler af det sammensatte indeks { _id: 1, "array.id": 1} og der var dublerede "array.id" værdier på tværs af dokumenterne også ( _id værdier 1 og 2 ).


Andet scenarie:

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

Det første dokument med _id : 3 bliver indsat med succes. Den anden har en fejl:"errmsg" : "E11000 duplicate key error collection: test.arrays2 index: array.id_1 dup key: { array.id: 3.0 } " . Denne adfærd er som forventet i henhold til bemærkningen Unique Multikey Index .



  1. Filtrer og omarranger resultater ved hjælp af node.js og mongodb i henhold til dato (måned)

  2. Gem en meget stor CSV til mongoDB ved hjælp af mongoose

  3. REST API-kald virker kun én gang

  4. MongoDB shell:hvordan man søger efter samlinger, der matcher et navn eller regex