MongoDB $pullAll: Удаление элементов из массива

Оператор $pullAll удаляет элементы из массива. Он отличается от оператора $pull.

Синтаксис

Синтаксис оператора $pullAll:

$pullAll: { <поле_массива>: [<значение1>, <значение2>, ...] }

<поле_массива> — имя поля массива, а <значение1>, <значение2> и т.д. — массив значений для удаления. В отличие от $pull, здесь нельзя использовать условия; указывается только массив значений. Все указанные значения будут удалены, даже если встречаются несколько раз.

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

Удалим item1 и item2 из массива card:

db.collection.update(
  { }, 
  { $pullAll: { card: ["item1", "item2"] } }
);

Это можно сделать с помощью $pull и $in:

db.collection.update(
  { }, 
  { $pull: { card: { $in: ["item1", "item2"] } } }
);

Но $pullAll проще.

Практическое применение в MongoDB Shell

У нас есть массив spentAmounts с элементами 400 и 500. Удалим их:

db.collection.update(
  { }, 
  { $pullAll: { spentAmounts: [400, 500] } }
);

spentAmounts станет пустым. Добавим в card элементы item1, item2, item1, item1, item3:

db.collection.update(
  { }, 
  { $push: { card: ["item1", "item2", "item1", "item1", "item3"] } }
);

Удалим item1 и item2 с помощью $pullAll:

db.collection.update(
  { }, 
  { $pullAll: { card: ["item1", "item2"] } }
);

Останется только item3. Все вхождения item1 и item2 будут удалены. После удаления item3, card станет пустым.

$pullAll удобно удаляет элементы из массива без дополнительных операторов. Это полезный инструмент для работы с массивами в MongoDB.

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