MongoDB에서 여러 개의 _id를 한 번에 삭제하려면 $in 연산자를 사용하면 됩니다. $in 연산자는 배열로 지정된 값들과 일치하는 모든 문서를 대상으로 작업을 수행하기 때문에, 특정 문서 여러 개를 동시에 삭제할 때 매우 유용합니다.
기본 문법
db.컬렉션명.remove({ _id : { $in: [ObjectId1, ObjectId2, ObjectId3] } });예제용 컬렉션 생성
먼저 실습에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.
> db.deleteMultipleIdsDemo.insertOne({"ClientName":"Chris","ClientAge":26});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9cd7d6a629b87623db1b19")
}
> db.deleteMultipleIdsDemo.insertOne({"ClientName":"Robert","ClientAge":28});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9cd7dea629b87623db1b1a")
}
> db.deleteMultipleIdsDemo.insertOne({"ClientName":"Sam","ClientAge":25});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9cd7e9a629b87623db1b1b")
}
> db.deleteMultipleIdsDemo.insertOne({"ClientName":"John","ClientAge":34});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9cd7f7a629b87623db1b1c")
}
> db.deleteMultipleIdsDemo.insertOne({"ClientName":"Carol","ClientAge":36});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9cd803a629b87623db1b1d")
}전체 문서 조회하기
find() 메서드를 사용해 컬렉션에 저장된 모든 문서를 확인합니다.
> db.deleteMultipleIdsDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c9cd7d6a629b87623db1b19"),
"ClientName" : "Chris",
"ClientAge" : 26
}
{
"_id" : ObjectId("5c9cd7dea629b87623db1b1a"),
"ClientName" : "Robert",
"ClientAge" : 28
}
{
"_id" : ObjectId("5c9cd7e9a629b87623db1b1b"),
"ClientName" : "Sam",
"ClientAge" : 25
}
{
"_id" : ObjectId("5c9cd7f7a629b87623db1b1c"),
"ClientName" : "John",
"ClientAge" : 34
}
{
"_id" : ObjectId("5c9cd803a629b87623db1b1d"),
"ClientName" : "Carol",
"ClientAge" : 36
}$in 연산자로 여러 ID 삭제하기
이제 $in 연산자를 사용해 3개의 문서를 한 번에 삭제해 보겠습니다.
> db.deleteMultipleIdsDemo.remove( { _id : { $in: [ObjectId("5c9cd7dea629b87623db1b1a"),
... ObjectId("5c9cd803a629b87623db1b1d"),
... ObjectId("5c9cd7d6a629b87623db1b19")
... ] } } );
WriteResult({ "nRemoved" : 3 })WriteResult({ "nRemoved" : 3 }) 출력은 총 3개의 문서가 성공적으로 삭제되었음을 의미합니다.
삭제 결과 확인하기
다시 find() 메서드를 실행해 실제로 삭제가 완료되었는지 확인합니다.
> db.deleteMultipleIdsDemo.find().pretty();
아래 출력 결과에서 볼 수 있듯이, 3개의 문서가 정상적으로 삭제되어 2개의 문서만 남게 되었습니다.
{
"_id" : ObjectId("5c9cd7e9a629b87623db1b1b"),
"ClientName" : "Sam",
"ClientAge" : 25
}
{
"_id" : ObjectId("5c9cd7f7a629b87623db1b1c"),
"ClientName" : "John",
"ClientAge" : 34
}참고: 최신 버전에서는 deleteMany() 권장
MongoDB 3.2 이상 버전에서는 remove() 메서드가 deprecated(사용 중단 권고) 상태이므로, 대신 deleteMany()를 사용하는 것이 좋습니다. 사용 방법은 동일하게 $in 연산자를 조건으로 넘겨주면 됩니다.
db.deleteMultipleIdsDemo.deleteMany({
_id: { $in: [
ObjectId("5c9cd7dea629b87623db1b1a"),
ObjectId("5c9cd803a629b87623db1b1d"),
ObjectId("5c9cd7d6a629b87623db1b19")
] }
});이처럼 $in 연산자를 활용하면 ObjectId 목록만 지정해 주면 되기 때문에, 조건이 복잡한 경우에도 간단하고 명확하게 여러 문서를 한 번에 삭제할 수 있습니다.