Удаление документов¶
Теперь, когда в нашей базе данных есть данные, давайте удалим их. Для этой цели 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 невозможно отменить, равно как нельзя восстановить удаленные документы, разумеется, если только речь не идет о восстановлении предварительно сохраненной версии данных.