Удаление документов¶
Теперь, когда в нашей базе данных есть данные, давайте удалим их. Для этой цели CRUD API предоставляет методы deleteOne
и deleteMany
. Оба этих метода принимают документ фильтра в качестве первого параметра. Фильтр задает набор критериев для сопоставления при удалении документов. Чтобы удалить документ со значением _id
, равным 4
, мы используем метод deleteOne
в оболочке mongo, как показано здесь:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
В этом примере мы использовали фильтр, который может соответствовать только одному документу, поскольку значения _id
уникальны в коллекции. Однако мы также можем указать фильтр, который соответствует нескольким документам в коллекции. В этом случае метод deleteOne
удалит первый найденный документ, который соответствует фильтру. Какой документ будет найден первым, зависит от нескольких факторов, в том числе от порядка, в котором были вставлены документы, того, какие обновления были внесены в них (для некоторых подсистем хранения), и того, какие индексы указаны. Как и при любой операции с базой данных, убедитесь, что вы знаете, как использование метода deleteOne
повлияет на ваши данные.
Чтобы удалить все документы, которые соответствуют фильтру, используйте метод deleteMany
:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
В качестве более реалистичного варианта использования предположим, что вы хотите удалить каждого пользователя из коллекции mailing.list
, где значение opt-out
равно true
:
1 |
|
В версиях MongoDB до 3.0 remove
был основным методом удаления документов. Драйверы MongoDB представили методы deleteOne
и deleteMany
одновременно с выпуском сервера MongoDB 3.0, и оболочка начала поддерживать эти методы в версии 3.2. Хотя метод remove
все еще поддерживается по причине обратной совместимости, в своих приложениях следует использовать методы deleteOne
и deleteMany
. Текущий CRUD API предоставляет более чистый набор семантики и, особенно в случае с операциями с несколькими документами, помогает разработчикам приложений избежать распространенных ошибок с предыдущим API.
drop¶
Можно использовать метод deleteMany
, чтобы удалить все документы в коллекции:
1 2 3 4 5 6 7 8 9 |
|
Удаление документов обычно является довольно быстрой операцией. Однако если вы хотите очистить всю коллекцию, ее быстрее удалить с помощью метода drop
:
1 2 |
|
а затем воссоздать любые индексы в пустой коллекции.
Как только данные удаляются, они исчезают навсегда. Операции drop
и delete
невозможно отменить, равно как нельзя восстановить удаленные документы, разумеется, если только речь не идет о восстановлении предварительно сохраненной версии данных.