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

MongoDB에서 특정 필드가 없는 문서를 찾는 방법 ($exists 연산자 활용)

MongoDB에서 특정 필드를 가지고 있지 않은 문서를 조회하려면 $exists 연산자를 사용하면 됩니다. $exists 값이 false인 조건을 걸면 해당 필드가 존재하지 않는 문서만 반환됩니다.

기본 문법

> db.컬렉션명.find({"필드명":{$exists:false}}).pretty();

문법을 이해하기 위해 실제 예제를 통해 살펴보겠습니다.

예제 컬렉션 생성

먼저 테스트용 컬렉션에 문서를 삽입합니다. 세 개의 문서를 순서대로 추가하는 쿼리는 다음과 같습니다.

> db.findDocumentDoNotHaveCertainFields.insertOne({"UserId":101,"UserName":"John","UserAge":21});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8a95fb6cea1f28b7aa07fb")
}
> db.findDocumentDoNotHaveCertainFields.insertOne({"UserName":"David","UserAge":22,"UserFavouriteSubject":["C","Java"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8a96116cea1f28b7aa07fc")
}
> db.findDocumentDoNotHaveCertainFields.insertOne({"UserName":"Bob","UserAge":24,"UserFavouriteSubject":["MongoDB","MySQL"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8a96306cea1f28b7aa07fd")
}

저장된 전체 문서 확인

find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.

> db.findDocumentDoNotHaveCertainFields.find().pretty();

실행 결과는 다음과 같습니다.

{
    "_id" : ObjectId("5c8a95fb6cea1f28b7aa07fb"),
    "UserId" : 101,
    "UserName" : "John",
    "UserAge" : 21
}
{
    "_id" : ObjectId("5c8a96116cea1f28b7aa07fc"),
    "UserName" : "David",
    "UserAge" : 22,
    "UserFavouriteSubject" : [
        "C",
        "Java"
    ]
}
{
    "_id" : ObjectId("5c8a96306cea1f28b7aa07fd"),
    "UserName" : "Bob",
    "UserAge" : 24,
    "UserFavouriteSubject" : [
        "MongoDB",
        "MySQL"
    ]
}

출력 결과를 보면 첫 번째 문서(John)에는 UserFavouriteSubject 필드가 없고, 나머지 두 문서(David, Bob)에는 해당 필드가 존재합니다.

$exists:false로 특정 필드가 없는 문서 조회하기

이제 UserFavouriteSubject 필드가 없는 항목만 찾아보겠습니다. 다음 쿼리를 실행합니다.

> db.findDocumentDoNotHaveCertainFields.find({"UserFavouriteSubject":{$exists:false}}).pretty();

실행 결과는 다음과 같습니다.

{
    "_id" : ObjectId("5c8a95fb6cea1f28b7aa07fb"),
    "UserId" : 101,
    "UserName" : "John",
    "UserAge" : 21
}

결과를 보면 UserFavouriteSubject 필드가 없는 John의 문서만 반환된 것을 확인할 수 있습니다.

참고 사항

  • $exists:true를 사용하면 반대로 특정 필드가 존재하는 문서만 조회할 수 있습니다.
  • 필드의 값이 null인 경우와 필드 자체가 없는 경우는 서로 다르게 처리되므로 주의해야 합니다. $exists:false는 필드 자체가 없는 문서만 반환합니다.
  • 대량의 데이터를 조회할 때 $exists 조건에 인덱스를 활용하면 성능을 개선할 수 있습니다.