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

MongoDB에서 특정 필드가 존재하지 않는 문서를 조회하는 방법 ($exists 활용법)

MongoDB에서 필드가 없는 문서 찾기

MongoDB에서 특정 필드가 존재하지 않는 문서를 조회하려면 $exists 연산자를 false 값과 함께 사용하면 됩니다. 기본 문법은 다음과 같습니다.

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

$exists: false 조건은 해당 필드를 아예 가지고 있지 않은 문서만 반환합니다. 이는 MongoDB의 스키마가 유연하기 때문에 가능한 기능으로, 동일한 컬렉션 내에서 서로 다른 구조의 문서가 공존할 수 있습니다.

예제 컬렉션 생성하기

문법을 실제로 이해하기 위해 예제 컬렉션을 만들어 보겠습니다. 아래 쿼리는 두 개의 문서를 삽입합니다. 첫 번째 문서에는 StudentMathMarks 필드가 없고, 두 번째 문서에는 해당 필드가 포함되어 있습니다.

> db.findDocumentNonExistenceFieldDemo.insertOne({"StudentName":"John","StudentAge":25});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8a5c629064dcd4a68b70e8")
}
> db.findDocumentNonExistenceFieldDemo.insertOne({"StudentName":"David","StudentAge":26,"StudentMathMarks":78});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8a5c809064dcd4a68b70e9")
}

전체 문서 확인하기

find() 메서드를 사용해 컬렉션의 모든 문서를 출력해 보겠습니다.

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

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

{
    "_id" : ObjectId("5c8a5c629064dcd4a68b70e8"),
    "StudentName" : "John",
    "StudentAge" : 25
}
{
    "_id" : ObjectId("5c8a5c809064dcd4a68b70e9"),
    "StudentName" : "David",
    "StudentAge" : 26,
    "StudentMathMarks" : 78
}

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

이제 StudentMathMarks 필드가 존재하지 않는 문서만 조회하는 쿼리입니다.

> db.findDocumentNonExistenceFieldDemo.find({ "StudentMathMarks" : { "$exists" : false } }).pretty();

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

{
    "_id" : ObjectId("5c8a5c629064dcd4a68b70e8"),
    "StudentName" : "John",
    "StudentAge" : 25
}

결과를 보면 StudentMathMarks 필드를 가지고 있지 않은 John의 문서만 반환된 것을 확인할 수 있습니다.

참고 사항

  • $exists: true를 사용하면 반대로 해당 필드가 존재하는 문서만 조회할 수 있습니다.
  • 필드의 값이 null인 경우와 필드 자체가 없는 경우는 다릅니다. 값이 null인 문서까지 제외하려면 { "필드명": { "$exists": false } } 조건이 정확히 일치하는 방식입니다.
  • 대량의 데이터에서 이런 쿼리를 자주 사용한다면 부분 인덱스(partial index)나 스파스 인덱스(sparse index)를 고려하면 성능을 개선할 수 있습니다.