Обеспечение уникальности отдельных значений в поле массива
В дополнение к приведенному выше примеру в MongoDB есть функция, гарантирующая, что при добавлении нового объекта / value в поле массива, что он будет выполнять обновление только в том случае, если значение / объект еще не существует.
Итак, если у вас есть документ, который выглядит следующим образом:
{ _id: 123, kittens: [456] }
Это будет разрешено:
db.cats.update({_id:123}, {$push: {kittens:456}})
, что приводит к
{ _id: 123, kittens: [456, 456] }
, однако использование функции $ addToSet (в отличие от $ push) проверяет, существует ли уже существующее значение перед добавлением его. Итак, начиная с:
{ _id: 123, kittens: [456] }
, тогда выполнение:
db.cats.update({_id:123}, {$addToSet: {kittens:456}})
Не было бы никакого эффекта.
Итак, длинный рассказ, уникальные ограничения надеть 't проверять уникальность внутри значений элементов поля массива, только два документа не могут иметь одинаковые значения в индексированных полях.