MongoDB 컬렉션에서 빈 필드를 확인하는 방법
MongoDB 컬렉션 내에서 값이 빈 문자열("")인 필드를 조회하려면 $exists 연산자와 $eq 연산자를 함께 사용하면 됩니다. $exists는 해당 필드가 문서에 존재하는지 여부를 판단하고, $eq는 필드의 값이 특정 값과 정확히 일치하는지 비교합니다.
1. 테스트용 컬렉션 생성 및 문서 삽입
먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다. 일부 문서에는 LastName이 빈 문자열로 들어가 있습니다.
> db.demo485.insertOne({"FirstName":"Chris","LastName":""});{
"acknowledged" : true,
"insertedId" : ObjectId("5e82e9f6b0f3fa88e22790a8")
}
> db.demo485.insertOne({"FirstName":"David","LastName":"Miller"});{
"acknowledged" : true,
"insertedId" : ObjectId("5e82e9fdb0f3fa88e22790a9")
}
> db.demo485.insertOne({"FirstName":"Chris","LastName":"Brown"});{
"acknowledged" : true,
"insertedId" : ObjectId("5e82ea03b0f3fa88e22790aa")
}
> db.demo485.insertOne({"FirstName":"Robert","LastName":""});{
"acknowledged" : true,
"insertedId" : ObjectId("5e82ea0fb0f3fa88e22790ab")
}2. find() 메서드로 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 화면에 출력할 수 있습니다.
> db.demo485.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e82e9f6b0f3fa88e22790a8"), "FirstName" : "Chris", "LastName" : "" }
{ "_id" : ObjectId("5e82e9fdb0f3fa88e22790a9"), "FirstName" : "David", "LastName" : "Miller" }
{ "_id" : ObjectId("5e82ea03b0f3fa88e22790aa"), "FirstName" : "Chris", "LastName" : "Brown" }
{ "_id" : ObjectId("5e82ea0fb0f3fa88e22790ab"), "FirstName" : "Robert", "LastName" : "" }3. 빈 필드를 조회하는 쿼리 작성하기
이제 LastName 필드가 존재하면서 값이 빈 문자열인 문서만 찾아보겠습니다. 아래와 같이 $exists와 $eq를 조합한 쿼리를 실행합니다.
> db.demo485.find({"LastName" : {"$exists" : true, "$eq" : ""}})실행 결과, LastName이 빈 문자열인 두 개의 문서만 반환되는 것을 확인할 수 있습니다.
{ "_id" : ObjectId("5e82e9f6b0f3fa88e22790a8"), "FirstName" : "Chris", "LastName" : "" }
{ "_id" : ObjectId("5e82ea0fb0f3fa88e22790ab"), "FirstName" : "Robert", "LastName" : "" }추가 팁: 빈 필드 조회 시 주의사항
MongoDB에서 "빈 값"은 상황에 따라 의미가 다릅니다. 위 예제처럼 값이 빈 문자열("")인 경우와, 필드 자체가 아예 없는 경우는 서로 다른 조건으로 처리해야 합니다.
- 빈 문자열 조회: { "필드명": { "$exists": true, "$eq": "" } }
- 필드가 존재하지 않는 문서 조회: { "필드명": { "$exists": false } }
- null 또는 필드 부재 모두 포함: { "필드명": null } — 이 조건은 값이 null인 문서와 필드 자체가 없는 문서를 함께 반환합니다.
또한 공백만 포함된 문자열(예: " ")까지 함께 걸러내고 싶다면 $regex를 활용하거나 애플리케이션 단에서 trim 처리 후 저장하는 방식을 고려하는 것이 좋습니다. 데이터 입력 단계에서 유효성 검증을 수행하면 이후 조회 로직을 훨씬 단순하게 유지할 수 있습니다.