Припустимо, у нас є відношення між дітьми та батьками, і одне з наших полів — це список предків, що є масивом батьків та їхніх батьків. Якщо ми хочемо видалити всіх дітей конкретного батька, ось що ми зробимо. Щоб видалити всі елементи в MongoDB, де поле ancestor
містить будь-яке значення з масиву ["XYZ"]
, можна використати оператор $in
у запиті. Ось як це зробити в MongoDB Compass:
- Відкрийте MongoDB Compass і підключіться до вашої бази даних.
- Перейдіть до потрібної колекції.
- Клікніть на вкладку "Aggregations" або використовуйте панель запитів для "Filter".
- Використовуйте наступний запит у панелі запитів або фільтрі:
Запит:
{ "ancestor": { "$in": ["XYZ"] } }
- Клікніть на опцію "Delete Many", щоб видалити всі документи, що відповідають умові.
Примітка: можливо, вам слід використовувати objectId, як показано вище!
Альтернативно, використовуючи MongoDB shell або програмно:
Програмний підхід:
Якщо ви виконуєте запит програмно, метод deleteMany
є відповідним.
Приклад у Node.js:
const { MongoClient } = require("mongodb");
async function deleteItems() {
const uri = "your_mongodb_connection_string";
const client = new MongoClient(uri);
try {
await client.connect();
const database = client.db("your_database_name");
const collection = database.collection("your_collection_name");
const result = await collection.deleteMany({
ancestor: { $in: ["XYZ"] } // вам, можливо, слід використовувати ObjectID тут
});
console.log(`${result.deletedCount} документ(ів) було видалено.`);
} finally {
await client.close();
}
}
deleteItems().catch(console.error);
Замініть your_mongodb_connection_string
, your_database_name
, та your_collection_name
на ваші конкретні дані.
Перекладено з: Mongo Delete All ancestors By Id