MongoDB에서 컬렉션에 저장된 문서에서 특정 필드(키)를 삭제해야 할 때가 있습니다. 이럴 때 $unset 연산자를 사용하면 간단하게 해결할 수 있습니다. 이 글에서는 예제를 통해 MongoDB에서 키 필드를 제거하는 방법을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성하기
먼저 insertOne() 메서드를 사용하여 테스트용 컬렉션을 만들고 문서를 삽입합니다.
> db.removeKeyFieldsDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Doe","StudentAge":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cc6c8289cb58ca2b005e672")
}
> db.removeKeyFieldsDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Smith","StudentAge":21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cc6c8359cb58ca2b005e673")
}위 명령으로 StudentFirstName, StudentLastName, StudentAge 세 개의 필드를 가진 두 개의 학생 문서가 생성되었습니다.
2. 현재 저장된 문서 확인하기
find() 메서드를 사용하여 컬렉션의 모든 문서를 조회합니다.
> db.removeKeyFieldsDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5cc6c8289cb58ca2b005e672"),
"StudentFirstName" : "John",
"StudentLastName" : "Doe",
"StudentAge" : 23
}
{
"_id" : ObjectId("5cc6c8359cb58ca2b005e673"),
"StudentFirstName" : "John",
"StudentLastName" : "Smith",
"StudentAge" : 21
}3. $unset 연산자로 필드 제거하기
이제 $unset 연산자를 사용하여 모든 문서에서 StudentAge 필드를 제거해 보겠습니다. 빈 조건({})을 사용하면 컬렉션 내 모든 문서에 업데이트가 적용됩니다.
> db.removeKeyFieldsDemo.updateMany({},{$unset:{StudentAge:1}});
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }결과를 보면 2개의 문서가 일치(matchedCount: 2)하고, 2개의 문서가 수정(modifiedCount: 2)되었음을 확인할 수 있습니다.
4. 제거 후 결과 확인하기
다시 한번 전체 문서를 조회하여 StudentAge 필드가 실제로 삭제되었는지 확인합니다.
> db.removeKeyFieldsDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5cc6c8289cb58ca2b005e672"),
"StudentFirstName" : "John",
"StudentLastName" : "Doe"
}
{
"_id" : ObjectId("5cc6c8359cb58ca2b005e673"),
"StudentFirstName" : "John",
"StudentLastName" : "Smith"
}정리 및 참고 사항
- $unset 연산자는 지정한 필드를 문서에서 완전히 삭제합니다. 값이 null로 변경되는 것이 아니라 필드 자체가 사라집니다.
updateMany({}, {$unset: {필드명: 1}})처럼 빈 필터를 사용하면 컬렉션의 모든 문서에 적용됩니다.- 특정 조건의 문서만 수정하려면 첫 번째 인자에 조건 쿼리를 지정하면 됩니다. 예:
{$set: {StudentAge: {$gt: 22}}} - 단일 문서만 수정하고 싶다면
updateOne()메서드를 사용하는 것이 좋습니다. $unset에 지정하는 값(예:1,"")은 실제 값과 무관하며, 필드 제거 여부만 결정합니다.
이처럼 MongoDB의 $unset 연산자와 updateMany()를 함께 사용하면 대량의 문서에서 불필요한 필드를 손쉽게 정리할 수 있습니다.