Оператор $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.