MongoDB에서 문서 삭제하기
MongoDB에서 컬렉션(collection)에 저장된 문서(document)를 삭제하려면 remove() 메서드를 사용합니다. 이 글에서는 실제 예제를 통해 문서를 삽입하고, 조회한 뒤, 특정 조건에 맞는 문서를 삭제하는 전체 과정을 단계별로 살펴보겠습니다.
1단계: 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용해 'demo79'라는 컬렉션에 여러 개의 문서를 삽입합니다.
> db.demo79.insertOne({"Name":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2bdb2271bf0181ecc42293")
}
> db.demo79.insertOne({"Name":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2bdb2671bf0181ecc42294")
}
> db.demo79.insertOne({"Name":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2bdb2971bf0181ecc42295")
}
> db.demo79.insertOne({"Name":"Mike"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2bdb2c71bf0181ecc42296")
}2단계: find()로 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo79.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e2bdb2271bf0181ecc42293"), "Name" : "Chris" }
{ "_id" : ObjectId("5e2bdb2671bf0181ecc42294"), "Name" : "David" }
{ "_id" : ObjectId("5e2bdb2971bf0181ecc42295"), "Name" : "Bob" }
{ "_id" : ObjectId("5e2bdb2c71bf0181ecc42296"), "Name" : "Mike" }3단계: remove()로 문서 삭제하기
이제 MongoDB에서 문서를 삭제하는 핵심 쿼리입니다. 아래와 같이 remove() 메서드에 삭제할 문서의 조건을 전달하면 해당 조건과 일치하는 문서가 삭제됩니다. 여기서는 이름이 'Bob'인 문서를 삭제해 보겠습니다.
> db.demo79.remove({"Name":"Bob"});
WriteResult({ "nRemoved" : 1 })nRemoved : 1이라는 결과는 하나의 문서가 성공적으로 삭제되었음을 의미합니다.
4단계: 삭제 결과 확인하기
다시 find() 메서드를 실행해 삭제가 정상적으로 적용되었는지 확인합니다.
> db.demo79.find();
실행 결과를 보면 'Bob' 문서가 사라지고 나머지 세 개의 문서만 남아 있는 것을 확인할 수 있습니다. 문서가 성공적으로 삭제된 것입니다.
{ "_id" : ObjectId("5e2bdb2271bf0181ecc42293"), "Name" : "Chris" }
{ "_id" : ObjectId("5e2bdb2671bf0181ecc42294"), "Name" : "David" }
{ "_id" : ObjectId("5e2bdb2c71bf0181ecc42296"), "Name" : "Mike" }참고: 최신 MongoDB 버전에서의 권장 방식
MongoDB 4.2 버전부터 remove() 메서드는 더 이상 권장되지 않으며(deprecated), 대신 deleteOne() 또는 deleteMany() 메서드를 사용하는 것이 좋습니다.
- deleteOne(): 조건에 일치하는 첫 번째 문서 하나만 삭제합니다.
- deleteMany(): 조건에 일치하는 모든 문서를 한 번에 삭제합니다.
예를 들어 위의 삭제 작업은 다음과 같이 작성할 수 있습니다.
> db.demo79.deleteOne({"Name":"Bob"});조건 없이 remove({})를 호출하면 컬렉션의 모든 문서가 삭제되므로, 실무에서는 반드시 삭제 조건을 신중하게 지정해야 합니다.