MongoDB에서 특정 필드가 문서에 존재하는지 확인하려면 $exists 연산자를 사용하면 됩니다. 이 연산자는 true 또는 false 값을 받아 해당 필드의 존재 여부에 따라 문서를 필터링해 줍니다. 이번 글에서는 실제 예제를 통해 $exists 연산자의 사용법을 단계별로 살펴보겠습니다.
1. 테스트용 컬렉션 생성하기
먼저 예제에 사용할 문서들이 담긴 컬렉션을 생성해 보겠습니다. insertOne() 메서드를 사용하여 학생 정보 문서를 하나씩 삽입합니다.
>db.checkFieldExistsDemo.insertOne({"StudentFirstName":"John","StudentGender":"Male","StudentMongoDBScore":89});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd909611a844af18acdffbd")
}
>db.checkFieldExistsDemo.insertOne({"StudentFirstName":"Emma","StudentGender":"Female","StudentMongoDBScore":58});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd909781a844af18acdffbe")
}
>db.checkFieldExistsDemo.insertOne({"StudentFirstName":"Carol","StudentGender":"Male","StudentMongoDBScore":77});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd909871a844af18acdffbf")
}
>db.checkFieldExistsDemo.insertOne({"StudentFirstName":"David","StudentMongoDBScore":98});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd909a31a844af18acdffc0")
}위 코드에서 주목할 점은 마지막 문서(David)에는 StudentGender 필드가 의도적으로 포함되지 않았다는 것입니다. 이 문서를 통해 필드가 없는 경우를 테스트할 수 있습니다.
2. 저장된 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.checkFieldExistsDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5cd909611a844af18acdffbd"),
"StudentFirstName" : "John",
"StudentGender" : "Male",
"StudentMongoDBScore" : 89
}
{
"_id" : ObjectId("5cd909781a844af18acdffbe"),
"StudentFirstName" : "Emma",
"StudentGender" : "Female",
"StudentMongoDBScore" : 58
}
{
"_id" : ObjectId("5cd909871a844af18acdffbf"),
"StudentFirstName" : "Carol",
"StudentGender" : "Male",
"StudentMongoDBScore" : 77
}
{
"_id" : ObjectId("5cd909a31a844af18acdffc0"),
"StudentFirstName" : "David",
"StudentMongoDBScore" : 98
}네 개의 문서 중 David의 문서에만 StudentGender 필드가 없다는 것을 확인할 수 있습니다.
3. $exists 연산자로 필드 존재 여부 확인하기
$exists 연산자에 false 값을 지정하면 특정 필드가 존재하지 않는 문서만 조회할 수 있습니다. 아래 쿼리는 StudentMongoDBScore가 98점이면서 StudentGender 필드가 없는 문서를 찾아, 프로젝션을 통해 StudentFirstName 값만 출력합니다.
> db.checkFieldExistsDemo.find({"StudentMongoDBScore":98, "StudentGender":{"$exists": false}},{'StudentFirstName': 1, '_id':0});실행 결과는 다음과 같습니다.
{ "StudentFirstName" : "David" }결과에서 알 수 있듯이 StudentGender 필드가 없는 유일한 문서인 David의 이름만 반환되었습니다. 참고로 반대 상황도 가능합니다. {"$exists": true}를 사용하면 해당 필드가 존재하는 문서만 조회할 수 있으므로, 스키마가 일관되지 않은 컬렉션에서 데이터를 검증하거나 정제할 때 매우 유용하게 활용됩니다.