MongoDB에서 특정 필드가 존재하지 않는 문서만 조회하고 싶다면 $exists 연산자를 사용하면 됩니다. 이 글에서는 예제 컬렉션을 만들고, 'Age' 필드가 없는 문서를 가져오는 방법을 단계별로 살펴보겠습니다.
1. 예제 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용해 demo234 컬렉션에 문서 세 개를 삽입합니다. 두 번째 문서에는 'Age' 필드가 없다는 점에 유의하세요.
> db.demo234.insertOne({"FirstName":"Chris","LastName":"Brown","Age":24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e418a50f4cebbeaebec5148")
}
> db.demo234.insertOne({"FirstName":"David","LastName":"Miller"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e418a5ff4cebbeaebec5149")
}
> db.demo234.insertOne({"FirstName":"John","LastName":"Smith",Age:34});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e418a70f4cebbeaebec514a")
}2. find()로 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo234.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e418a50f4cebbeaebec5148"), "FirstName" : "Chris", "LastName" : "Brown", "Age" : 24 }
{ "_id" : ObjectId("5e418a5ff4cebbeaebec5149"), "FirstName" : "David", "LastName" : "Miller" }
{ "_id" : ObjectId("5e418a70f4cebbeaebec514a"), "FirstName" : "John", "LastName" : "Smith", "Age" : 34 }3. $exists: false로 특정 필드가 없는 문서 조회하기
'Age' 필드가 존재하지 않는 문서만 가져오려면 조건에 {"Age": {$exists: false}}를 지정합니다. 아래 쿼리에서는 프로젝션으로 {"_id": 0}을 설정하여 _id 필드를 결과에서 제외했습니다.
> var iterator = db.demo234.find({"Age":{$exists:false}},{"_id":0});
> iterator.forEach(function(d)
...{
... printjson(d);
...})실행 결과 'Age' 필드가 없는 David Miller의 문서만 출력되는 것을 확인할 수 있습니다.
{ "FirstName" : "David", "LastName" : "Miller" }핵심 정리
- $exists: true는 해당 필드가 있는 문서를, $exists: false는 해당 필드가 없는 문서를 반환합니다.
- 두 번째 인수(프로젝션)를 활용하면 _id처럼 불필요한 필드를 결과에서 제외할 수 있습니다.
- forEach()와 printjson()을 함께 사용하면 조회 결과를 가독성 좋게 하나씩 출력할 수 있습니다.