Обеспечение уникальности отдельных значений в поле массива
В дополнение к примеру выше, в MongoDB есть функция, обеспечивающаядобавив новый объект / значение в поле массива, он будет выполнять обновление только в том случае, если значение / объект еще не существует.
Итак, если у вас есть документ, который выглядит следующим образом:
{ _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}})
Не будет никакого эффекта.
Итак, короче говоря, уникальные ограничения не проверяютсяуникальность в элементах значений поля массива, только два документа не могут иметь одинаковые значения в индексированных полях.