MongoDB에서 특정 필드(속성)를 실제로 가지고 있는 문서만 조회하고 싶다면 $ne 연산자를 활용할 수 있습니다. 이 글에서는 예제 컬렉션을 만들고, $ne : null 조건을 사용해 해당 속성이 존재하는 문서만 속성 이름 기준으로 검색하는 방법을 단계별로 살펴보겠습니다.
1. 테스트용 컬렉션 생성
먼저 문서가 담긴 컬렉션을 생성합니다. 일부러 FirstName 값이 null인 문서도 함께 삽입하여, 나중에 검색 결과가 어떻게 달라지는지 확인해 보겠습니다.
> db.searchByPropertyName.insertOne({"FirstName":"Larry","Age":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbaf7af7219729fde21ddb5")
}
> db.searchByPropertyName.insertOne({"FirstName":null,"Age":21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbaf7b97219729fde21ddb6")
}
> db.searchByPropertyName.insertOne({"FirstName":"John","Age":22});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbaf7c57219729fde21ddb7")
}
> db.searchByPropertyName.insertOne({"FirstName":null,"Age":25});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbaf7d07219729fde21ddb8")
}
> db.searchByPropertyName.insertOne({"FirstName":"David","Age":20});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbaf7df7219729fde21ddb9")
}총 5개의 문서가 저장되었으며, 그중 2개는 FirstName 값이 null입니다.
2. 전체 문서 확인하기
find() 메서드와 pretty()를 함께 사용하면 컬렉션의 모든 문서를 보기 좋게 출력할 수 있습니다.
> db.searchByPropertyName.find().pretty();
위 쿼리는 다음과 같은 결과를 반환합니다.
{
"_id" : ObjectId("5cbaf7af7219729fde21ddb5"),
"FirstName" : "Larry",
"Age" : 23
}
{
"_id" : ObjectId("5cbaf7b97219729fde21ddb6"),
"FirstName" : null,
"Age" : 21
}
{
"_id" : ObjectId("5cbaf7c57219729fde21ddb7"),
"FirstName" : "John",
"Age" : 22
}
{
"_id" : ObjectId("5cbaf7d07219729fde21ddb8"),
"FirstName" : null,
"Age" : 25
}
{
"_id" : ObjectId("5cbaf7df7219729fde21ddb9"),
"FirstName" : "David",
"Age" : 20
}3. $ne 연산자로 속성 이름 기준 검색하기
이제 핵심 부분입니다. { FirstName: { $ne: null } } 조건을 사용하면 FirstName 필드가 null이 아닌, 즉 실제 값을 가지고 있는 문서만 조회됩니다.
> db.searchByPropertyName.find({FirstName: { $ne : null } } ).pretty();실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5cbaf7af7219729fde21ddb5"),
"FirstName" : "Larry",
"Age" : 23
}
{
"_id" : ObjectId("5cbaf7c57219729fde21ddb7"),
"FirstName" : "John",
"Age" : 22
}
{
"_id" : ObjectId("5cbaf7df7219729fde21ddb9"),
"FirstName" : "David",
"Age" : 20
}결과 분석 및 참고 사항
FirstName이 null이었던 두 개의 문서(Age 21, Age 25)는 결과에서 제외되었고, 실제 문자열 값을 가진 세 개의 문서만 반환된 것을 확인할 수 있습니다.
여기서 한 가지 주의할 점이 있습니다. MongoDB에서 { field: { $ne: null } } 조건은 다음 두 경우를 모두 제외합니다.
- 필드 값이 명시적으로 null로 저장된 문서
- 애초에 해당 필드 자체가 존재하지 않는 문서
따라서 이 방식은 "필드가 존재하고 유효한 값을 가지고 있는 문서"를 찾는 데 매우 유용하게 활용됩니다. 만약 필드의 존재 여부만 확인하고 싶다면 $exists 연산자를 함께 사용하는 것도 좋은 대안입니다.