MongoDB $addToSet: Добавление элементов в массив без дубликатов

Оператор $addToSet добавляет элемент в массив только если он там ещё не присутствует. Его функциональность схожа с оператором $push, но с проверкой на дубликаты. Синтаксис аналогичен $push: $addToSet и объект с парами «ключ-значение», где ключ — имя поля, а значение — добавляемый элемент.

Примеры использования $addToSet

Рассмотрим примеры добавления элемента item 1 в массив cart. Если item 1 отсутствует, он добавляется. $addToSet поддерживает оператор $each для добавления нескольких элементов, каждый из которых предварительно проверяется на наличие в массиве. Если массива не существует, $addToSet создаст его автоматически.

Примеры в MongoDB Shell

Продемонстрируем работу с документом, имеющим cartID: 561, в котором массив cart содержит несколько элементов, включая дубликат item 2.

Запрос: cartID: 561

Операция: db.collection.updateOne({ cartID: 561 }, { $addToSet: { cart: "item 1" } })

Результат: modifiedCount: 0. Элемент item 1 уже присутствует.

Операция: db.collection.updateOne({ cartID: 561 }, { $addToSet: { cart: "item 2" } })

Результат: modifiedCount: 0. item 2 (дубликат) не добавляется.

Далее, удалим массив cart с помощью $unset и добавим элементы с помощью $addToSet.

Операция: db.collection.updateOne({ cartID: 561 }, { $unset: { cart: "" } }) затем db.collection.updateOne({ cartID: 561 }, { $addToSet: { cart: "item 1" } })

Результат: Элемент item 1 добавлен, массив cart создан.

Операция: db.collection.updateOne({ cartID: 561 }, { $addToSet: { cart: "item 1" } })

Результат: modifiedCount: 0. Попытка добавить существующий элемент.

Операция: db.collection.updateOne({ cartID: 561 }, { $addToSet: { cart: { $each: [ "item 2", "item 3" ] } } })

Результат: item 2 и item 3 добавлены.

Операция: db.collection.updateOne({ cartID: 561 }, { $addToSet: { cart: { $each: [ "item 3", "item 4" ] } } })

Результат: Добавлен только item 4.

Операция: db.collection.updateOne({ cartID: 561 }, { $addToSet: { cart: [ "item 5", "item 6" ] } }) (без $each)

Результат: item 5 и item 6 добавлены как один элемент-массив. Для добавления нескольких элементов следует использовать $each.

Удаление элементов

Для удаления элементов можно использовать оператор $pull. (Описание оператора $pull опущено).

Что будем искать? Например,программа