MongoDB 데이터 삭제

MongoDBBeginner
지금 연습하기

소개

이 랩에서는 MongoDB 데이터베이스에서 데이터를 효과적으로 삭제하는 방법을 배우게 됩니다. 단일 문서를 삭제하는 것부터 시작하여 여러 문서를 일괄 삭제하고 특정 조건에 따라 데이터를 제거하는 기술을 탐색합니다. 마지막으로 전체 컬렉션을 지우고 삭제 결과를 확인하는 방법을 배우게 됩니다. 이러한 기술은 MongoDB 데이터베이스를 관리하고 데이터 무결성을 유지하는 데 필수적입니다.

이 랩에서는 deleteOne()을 사용하여 단일 문서 삭제, deleteMany()를 사용하여 여러 문서 삭제, 조건부 삭제를 위한 쿼리 연산자 사용, deleteMany({}) 또는 drop()을 사용하여 컬렉션 지우기 등 다음과 같은 주제를 다룹니다. 이 랩이 끝나면 다양한 방법을 사용하여 MongoDB 에서 데이터를 삭제하는 방법에 대한 확실한 이해를 갖게 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 97%입니다.학습자들로부터 98%의 긍정적인 리뷰율을 받았습니다.

단일 문서 삭제

이 단계에서는 MongoDB 컬렉션에서 단일 문서를 삭제하는 방법을 배우게 됩니다. 먼저 MongoDB 셸에 연결하고 샘플 데이터를 준비해야 합니다.

터미널에서 다음 명령을 실행하여 MongoDB 셸을 시작합니다.

mongosh

셸에 들어가면 새 데이터베이스와 몇 개의 문서를 포함하는 컬렉션을 생성합니다.

use mylab_database

몇 개의 문서를 포함하는 새 컬렉션을 생성합니다.

db.users.insertMany([
  { name: "John Doe", age: 30, email: "john@example.com" },
  { name: "Jane Smith", age: 25, email: "jane@example.com" },
  { name: "Bob Johnson", age: 35, email: "bob@example.com" }
]);

출력은 세 개의 문서가 삽입되었음을 확인합니다.

{
  "acknowledged": true,
  "insertedIds": {
    "0": ObjectId("..."),
    "1": ObjectId("..."),
    "2": ObjectId("...")
  }
}

이제 단일 문서를 삭제하려면 deleteOne() 메서드를 사용합니다. 이 메서드는 지정된 필터와 일치하는 첫 번째 문서를 찾아 제거합니다. "Jane Smith"에 대한 문서를 삭제해 보겠습니다.

db.users.deleteOne({ name: "Jane Smith" });

출력은 하나의 문서가 성공적으로 삭제되었음을 나타냅니다.

{ "acknowledged": true, "deletedCount": 1 }
  • deleteOne(): 이 메서드는 필터 조건과 일치하는 첫 번째 문서만 제거합니다.
  • { name: "Jane Smith" }: 삭제할 문서를 지정하는 필터입니다.
  • deletedCount: 1: 문서가 하나 제거되었음을 확인합니다.

문서가 삭제되었는지 확인하려면 users 컬렉션에 남아 있는 모든 문서를 나열할 수 있습니다.

db.users.find();

출력에는 이제 두 개의 문서만 표시되어 "Jane Smith"가 제거되었음을 확인합니다.

여러 문서 삭제

이전 단계에서는 단일 문서를 삭제했습니다. 이제 deleteMany() 메서드를 사용하여 여러 문서를 한 번에 삭제하는 방법을 배우게 됩니다. 이는 특정 상태의 레코드를 정리하는 것과 같은 대량 삭제 작업에 유용합니다.

먼저 users 컬렉션에 몇 가지 새 문서를 추가해 보겠습니다. 이 문서에는 status 필드가 있으며, 이를 대량 삭제 작업에 사용할 것입니다.

db.users.insertMany([
  { name: "Alice Wilson", age: 28, status: "inactive" },
  { name: "Charlie Brown", age: 40, status: "inactive" },
  { name: "David Lee", age: 35, status: "active" },
  { name: "Eve Taylor", age: 45, status: "inactive" }
]);

출력은 네 개의 새 문서가 삽입되었음을 확인합니다.

{
  "acknowledged": true,
  "insertedIds": {
    "0": ObjectId("..."),
    "1": ObjectId("..."),
    "2": ObjectId("..."),
    "3": ObjectId("...")
  }
}

이제 deleteMany() 메서드를 사용하여 상태가 "inactive"인 모든 사용자를 제거합니다.

db.users.deleteMany({ status: "inactive" });

출력은 세 개의 문서가 삭제되었음을 보여줍니다.

{ "acknowledged": true, "deletedCount": 3 }
  • deleteMany(): 이 메서드는 필터 조건과 일치하는 모든 문서를 제거합니다.
  • { status: "inactive" }: 이 필터는 status 필드가 "inactive"인 모든 문서를 대상으로 합니다.

대량 삭제를 확인하려면 컬렉션에 남아 있는 모든 문서를 나열합니다.

db.users.find();

출력에는 "inactive"가 아닌 문서만 표시되어 대량 삭제가 성공했음을 보여줍니다.

조건을 사용하여 문서 삭제

MongoDB 는 더 복잡한 조건에 따라 문서를 삭제하기 위해 강력한 쿼리 연산자를 사용할 수 있도록 합니다. 이 단계에서는 $gt(보다 큼) 및 $lt(보다 작음) 와 같은 연산자를 사용하여 조건부 삭제를 수행하는 방법을 배우게 됩니다.

먼저 employees라는 새 컬렉션을 샘플 데이터로 생성해 보겠습니다.

db.employees.insertMany([
  { name: "John Doe", age: 25, department: "Sales", salary: 50000 },
  { name: "Jane Smith", age: 35, department: "Marketing", salary: 60000 },
  { name: "Bob Johnson", age: 45, department: "Sales", salary: 55000 },
  { name: "Alice Brown", age: 30, department: "HR", salary: 52000 }
]);

출력은 네 개의 문서가 삽입되었음을 확인합니다.

{
  "acknowledged": true,
  "insertedIds": {
    "0": ObjectId("..."),
    "1": ObjectId("..."),
    "2": ObjectId("..."),
    "3": ObjectId("...")
  }
}

이제 조건부 삭제를 수행해 보겠습니다. 40 세가 넘는 모든 직원을 제거합니다.

db.employees.deleteMany({ age: { $gt: 40 } });

출력은 하나의 문서가 삭제되었음을 나타냅니다.

{ "acknowledged": true, "deletedCount": 1 }
  • { age: { $gt: 40 } }: 이 필터는 $gt 연산자를 사용하여 age 필드가 40 보다 큰 문서를 선택합니다.

다음으로 여러 조건에 따라 삭제를 수행해 보겠습니다. "Sales" 부서에서 급여가 55,000 미만인 직원을 제거합니다.

db.employees.deleteMany({
  department: "Sales",
  salary: { $lt: 55000 }
});

출력은 또 다른 문서가 삭제되었음을 확인합니다.

{ "acknowledged": true, "deletedCount": 1 }
  • 이 명령은 두 가지 조건을 결합합니다. department는 "Sales"여야 하고 salary는 55,000 미만이어야 합니다 ($lt 연산자 사용).

결과를 확인하려면 employees 컬렉션에 남아 있는 문서를 확인합니다.

db.employees.find();

출력에는 삭제 기준을 충족하지 않은 두 명의 직원만 표시됩니다.

컬렉션의 모든 데이터 삭제

때로는 컬렉션에서 모든 문서를 제거해야 할 수도 있습니다. MongoDB 는 이를 달성하기 위한 두 가지 주요 방법을 제공합니다. 모든 문서를 제거하기 위해 deleteMany({})를 사용하거나 컬렉션 전체를 제거하기 위해 drop()을 사용하는 것입니다.

먼저 샘플 데이터로 새 products 컬렉션을 생성해 보겠습니다.

db.products.insertMany([
  { name: "Laptop", price: 1000, category: "Electronics" },
  { name: "Smartphone", price: 500, category: "Electronics" },
  { name: "Headphones", price: 100, category: "Electronics" }
]);

방법 1: deleteMany()로 모든 문서 제거

deleteMany() 메서드에 빈 필터 {}를 전달하여 컬렉션의 모든 문서를 제거할 수 있습니다. 이 접근 방식은 데이터를 삭제하지만 인덱스를 포함한 컬렉션 자체는 유지합니다.

db.products.deleteMany({});

출력은 세 개의 문서가 모두 삭제되었음을 보여줍니다.

{ "acknowledged": true, "deletedCount": 3 }

find() 쿼리를 실행하여 컬렉션이 비어 있는지 확인할 수 있습니다.

db.products.find();

이 명령은 문서를 반환하지 않습니다.

방법 2: drop()으로 컬렉션 전체 삭제

drop() 메서드는 더 파괴적입니다. 모든 문서, 인덱스 및 관련 메타데이터를 포함하여 컬렉션을 완전히 제거합니다.

먼저 삭제할 컬렉션을 갖도록 샘플 데이터를 다시 삽입해 보겠습니다.

db.products.insertMany([
  { name: "Laptop", price: 1000, category: "Electronics" },
  { name: "Smartphone", price: 500, category: "Electronics" },
  { name: "Headphones", price: 100, category: "Electronics" }
]);

이제 products 컬렉션을 완전히 삭제합니다.

db.products.drop();

출력 true는 컬렉션이 성공적으로 삭제되었음을 확인합니다.

true

이제 products 컬렉션을 쿼리하려고 하면 컬렉션이 더 이상 존재하지 않기 때문에 결과가 반환되지 않습니다.

db.products.find();

이 명령은 컬렉션이 사라졌으므로 출력이 없습니다. mongosh 셸을 종료하려면 exit를 입력하거나 Ctrl+D를 누르면 됩니다.

요약

이 실습에서는 MongoDB 에서 데이터를 삭제하는 기본적인 기술을 배웠습니다. 특정 필터를 기반으로 단일 문서를 제거하기 위해 deleteOne() 메서드를 사용하는 것부터 시작했습니다. 그런 다음 기준과 일치하는 여러 문서를 효율적으로 제거하는 deleteMany()를 사용하여 대량 삭제로 진행했습니다. 또한 $gt$lt와 같은 쿼리 연산자를 사용하여 더 복잡한 조건부 삭제를 수행하는 방법을 살펴보았습니다. 마지막으로 컬렉션 구조를 유지하면서 모든 문서를 제거하는 deleteMany({})를 사용하거나 컬렉션 전체를 영구적으로 제거하는 drop()을 사용하여 컬렉션을 지우는 두 가지 방법을 배웠습니다.

이러한 기술은 데이터베이스 관리, 데이터 수명 주기 관리, 불필요한 레코드 정리 및 MongoDB 데이터베이스의 전반적인 상태 유지에 필수적입니다.