sql >> Databáze >  >> NoSQL >> MongoDB

Jak nastavit jedinečné omezení pro pole v dokumentu vnořeném do pole?

Ano. Přečtěte si prosím následující dva scénáře použití jedinečného indexu v poli pole s vloženými dokumenty.

Unikátní víceklíčový index (index v poli vloženého dokumentu v poli):


První scénář:

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

Všechny tři dokumenty se vloží bez chyb.

Podle poznámky k Unique Multikey Index , výše, dokument s _id : 3 má v poli dva vložené dokumenty se stejným "array.id" hodnota:3 .

Jedinečnost je také vynucena na dvou klíčích složeného indexu { _id: 1, "array.id": 1} a byly zde duplicitní "array.id" hodnoty také v dokumentech ( _id hodnoty 1 a 2 ).


Druhý scénář:

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

První dokument s _id : 3 se úspěšně vloží. Druhý obsahuje chybu:"errmsg" : "E11000 duplicate key error collection: test.arrays2 index: array.id_1 dup key: { array.id: 3.0 } " . Toto chování je očekávané podle poznámky Unique Multikey Index .



  1. Jak uložit binární objekt v redis pomocí uzlu?

  2. MongoDB $pull array 2 úrovně

  3. MongoDB:forEach vs. fetch + every

  4. Třetí argument při vytváření modelu v MongooseJS