MongoDB: Видалення всіх предків за ідентифікатором

Припустимо, у нас є відношення між дітьми та батьками, і одне з наших полів — це список предків, що є масивом батьків та їхніх батьків. Якщо ми хочемо видалити всіх дітей конкретного батька, ось що ми зробимо. Щоб видалити всі елементи в MongoDB, де поле ancestor містить будь-яке значення з масиву ["XYZ"], можна використати оператор $in у запиті. Ось як це зробити в MongoDB Compass:

  1. Відкрийте MongoDB Compass і підключіться до вашої бази даних.
  2. Перейдіть до потрібної колекції.
  3. Клікніть на вкладку "Aggregations" або використовуйте панель запитів для "Filter".
  4. Використовуйте наступний запит у панелі запитів або фільтрі:

Запит:

{ "ancestor": { "$in": ["XYZ"] } }
  1. Клікніть на опцію "Delete Many", щоб видалити всі документи, що відповідають умові.

pic

Примітка: можливо, вам слід використовувати 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

Leave a Reply

Your email address will not be published. Required fields are marked *