MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak ustawić unikalne ograniczenie dla pola w dokumencie zagnieżdżonym w tablicy?

TAk. Zapoznaj się z poniższymi dwoma scenariuszami dotyczącymi używania unikalnego indeksu w polu tablicy z osadzonymi dokumentami.

Unikalny indeks multikey (indeks osadzonego pola dokumentu w tablicy):


Pierwszy scenariusz:

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

Wszystkie trzy dokumenty są wstawiane bez żadnych błędów.

Zgodnie z uwagą dotyczącą Unikalnego indeksu z wieloma klawiszami , powyżej, dokument z _id : 3 ma dwa osadzone dokumenty w tablicy z tym samym "array.id" wartość:3 .

Ponadto unikalność jest wymuszana na dwóch kluczach indeksu złożonego { _id: 1, "array.id": 1} i były zduplikowane "array.id" wartości w dokumentach również ( _id wartości 1 i 2 ).


Drugi scenariusz:

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

Pierwszy dokument z _id : 3 zostanie wstawiony pomyślnie. Drugi zawiera błąd:"errmsg" : "E11000 duplicate key error collection: test.arrays2 index: array.id_1 dup key: { array.id: 3.0 } " . To zachowanie jest zgodne z oczekiwaniami zgodnie z notatką Unikalny indeks wielokluczowy .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Błąd podczas włączania szyfrowania danych przy użyciu klucza lokalnego MONGODB

  2. MongoDB Tutorial:Łączenie się z MongoDB w Scala

  3. Omówienie szyfrowania na poziomie pola po stronie klienta w MongoDB

  4. MongoDB - DBRef

  5. Zapytanie, aby znaleźć wszystkie dokumenty z niezerowymi milisekundami