Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 빈 문자열 필드 제거하기 – updateMany()와 $unset 활용법

MongoDB에서 빈 문자열 필드 제거하기

MongoDB 컬렉션에는 값이 빈 문자열("")인 필드가 그대로 남아 있는 경우가 종종 있습니다. 이러한 빈 필드는 데이터 품질을 저하시키고 쿼리 작성 시 혼란을 줄 수 있으므로 적절히 정리해 주는 것이 좋습니다. 이 글에서는 updateMany() 메서드와 $unset 연산자를 사용해 조건에 맞는 모든 문서에서 빈 필드를 한 번에 제거하는 방법을 단계별로 살펴봅니다.

1. 예제 컬렉션 생성

먼저 빈 문자열 값을 포함한 문서들로 테스트용 컬렉션을 만들어 보겠습니다.

> db.removeEmptyFieldsDemo.insertOne({"StudentName":""});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ce92b9578f00858fb12e919")
}
> db.removeEmptyFieldsDemo.insertOne({"StudentName":"Chris"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ce92b9878f00858fb12e91a")
}
> db.removeEmptyFieldsDemo.insertOne({"StudentName":""});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ce92b9c78f00858fb12e91b")
}
> db.removeEmptyFieldsDemo.insertOne({"StudentName":"Robert"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ce92ba078f00858fb12e91c")
}

2. 전체 문서 조회

find() 메서드를 실행하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

> db.removeEmptyFieldsDemo.find();

실행 결과는 다음과 같습니다. 네 개의 문서 중 두 개는 StudentName 값이 빈 문자열인 상태입니다.

{ "_id" : ObjectId("5ce92b9578f00858fb12e919"), "StudentName" : "" }
{ "_id" : ObjectId("5ce92b9878f00858fb12e91a"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5ce92b9c78f00858fb12e91b"), "StudentName" : "" }
{ "_id" : ObjectId("5ce92ba078f00858fb12e91c"), "StudentName" : "Robert" }

3. $unset으로 빈 필드 제거

이제 StudentName 값이 빈 문자열인 문서를 찾아 해당 필드를 제거합니다. $unset 연산자는 지정된 필드를 문서에서 완전히 삭제하며, 대상 필드에 1(true)을 지정해 사용합니다.

> db.removeEmptyFieldsDemo.updateMany({"StudentName": ""}, { $unset : {"StudentName" : 1 }});
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }

실행 결과의 matchedCountmodifiedCount가 모두 2로 표시되는데, 이는 빈 문자열을 가진 두 개의 문서가 성공적으로 업데이트되었음을 의미합니다.

4. 변경 결과 확인

다시 find()를 실행해 최종 결과를 확인해 보겠습니다.

> db.removeEmptyFieldsDemo.find();
{ "_id" : ObjectId("5ce92b9578f00858fb12e919") }
{ "_id" : ObjectId("5ce92b9878f00858fb12e91a"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5ce92b9c78f00858fb12e91b") }
{ "_id" : ObjectId("5ce92ba078f00858fb12e91c"), "StudentName" : "Robert" }

값이 비어 있던 두 문서에서는 StudentName 필드 자체가 사라진 것을 확인할 수 있습니다.

알아두면 좋은 점

  • $unset은 필드 값을 null로 바꾸는 것이 아니라 키 자체를 문서에서 완전히 제거합니다.
  • deleteMany()는 조건에 맞는 문서 전체를 삭제하는 메서드입니다. 문서를 유지하면서 특정 필드만 제거하려면 반드시 updateMany()와 $unset을 사용해야 합니다.
  • 공백 문자만 포함된 값까지 함께 정리하고 싶다면 정규식 조건({"StudentName": /^\s*$/})을 활용하면 더욱 확실하게 처리할 수 있습니다.