Удалять документы в MongoDB можно различными способами. Здесь надо отметить следующие методы коллекции:
deleteMany(): удаляет все документы, которые соответствуют определенному критерию
deleteOne(): удаляет один документ, который соответствует определенному критерию
findOneAndDelete(): получает и удаляет один документ, который соответствует определенному критерию
drop(): удаляет всю коллекцию
Метод deleteOne() удаляет только объект:
const MongoClient = require("mongodb").MongoClient; const url = "mongodb://127.0.0.1:27017/"; const mongoClient = new MongoClient(url); async function run() { try { await mongoClient.connect(); const db = mongoClient.db("usersdb"); const collection = db.collection("users"); const result = await collection.deleteOne({name: "Bob"}); console.log(result); }catch(err) { console.log(err); } finally { await mongoClient.close(); } } run().catch(console.error);
В качестве параметра метод deleteOne()
принимает фильтр документов, которые надо удалить. Возвращает метод результат операции
удаления. При этом результат удаления будет представлять объект, в котором с помощью свойства deletedCount
можно увидеть количество удаленных документов:
c:\node\mongoapp>node app { acknowledged: true, deletedCount: 1} c:\node\mongoapp>
Метод deleteMany() работает аналогичным образом, только удаляет все документы, которые соответствуют фильтру. Например, удалим всех пользователей, у которых имя "Tom":
const MongoClient = require("mongodb").MongoClient; const url = "mongodb://127.0.0.1:27017/"; const mongoClient = new MongoClient(url); async function run() { try { await mongoClient.connect(); const db = mongoClient.db("usersdb"); const collection = db.collection("users"); const result = await collection.deleteMany({name: "Tom"}); console.log(result); }catch(err) { console.log(err); } finally { await mongoClient.close(); } } run().catch(console.error);
Метод findOneAndDelete() удаляет один документ по определенному критерию, но по сравнению с методом deleteOne() он позволяет получить удаленный документ:
const MongoClient = require("mongodb").MongoClient; const url = "mongodb://127.0.0.1:27017/"; const mongoClient = new MongoClient(url); async function run() { try { await mongoClient.connect(); const db = mongoClient.db("usersdb"); const collection = db.collection("users"); const result = await collection.findOneAndDelete({age: 21}); console.log(result); }catch(err) { console.log(err); } finally { await mongoClient.close(); } } run().catch(console.error);
Консольный вывод программы:
c:\node\mongoapp>node app { _id: new ObjectId("6112ad050d15a6dfd6330280"), name: "Alice", age: 21 } c:\node\mongoapp>
Из консольного вывода мы видим, что какой документ был удален.
Метод drop() удаляет всю коллекцию:
const MongoClient = require("mongodb").MongoClient; const url = "mongodb://127.0.0.1:27017/"; const mongoClient = new MongoClient(url); async function run() { try { await mongoClient.connect(); const db = mongoClient.db("usersdb"); const collection = db.collection("users"); const result = await collection.drop(); console.log(result); // true|false }catch(err) { console.log(err); } finally { await mongoClient.close(); } } run().catch(console.error);
Результатом метода drop является булевое значение.
Стоит отметить, что если удаляемая коллекция - единственная коллекция в базе данных, то вместе с коллекцией удаляется и вся база данных.