MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да задам уникално ограничение за поле в документ, вложен в масив?

да Моля, вижте следните два сценария относно използването на уникалния индекс в поле на масив с вградени документи.

Уникален многоключов индекс (индекс на полето на вграден документ в масив):


Първи сценарий:

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

И трите документа се вмъкват без никакви грешки.

Според бележката относно Уникален многоключов индекс , по-горе, документът с _id : 3 има два вградени документа в масива с един и същ "array.id" стойност:3 .

Освен това уникалността се налага на два ключа от съставния индекс { _id: 1, "array.id": 1} и имаше дубликат "array.id" стойности и в документите (_id стойности 1 и 2 ).


Втори сценарий:

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

Първият документ с _id : 3 се вмъква успешно. Вторият има грешка:"errmsg" : "E11000 duplicate key error collection: test.arrays2 index: array.id_1 dup key: { array.id: 3.0 } " . Това поведение е очаквано според бележката Уникален многоключов индекс .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Направете mongoid сесия само за четене

  2. запитване на поделемент mongodb

  3. Не може да се стартира Mongo DB

  4. Публикувайте данни от формуляр в масив от съществуващ MongoDB документ с помощта на Express и Mongoose

  5. Премахване на дублиращи се записи от mongodb 4.0