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

MongoDB에서 필드 및 하위 필드로 항목 필터링하는 방법

MongoDB에서 필드와 하위 필드(subfield)를 기준으로 항목을 필터링하려면 점 표기법(dot notation)을 사용하면 됩니다. 이 방식은 중첩된 문서 구조 내부의 특정 값에 쉽게 접근할 수 있게 해줍니다.

1. 컬렉션 생성 및 문서 삽입

먼저 예제에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.

> db.demo638.insert({Name:"Chris"});
WriteResult({ "nInserted" : 1 })
> db.demo638.insert({Name:"David",details:{Subject:"MongoDB"}});
WriteResult({ "nInserted" : 1 })

위 코드는 두 개의 문서를 삽입합니다. 하나는 Name 필드만 가지고 있고, 다른 하나는 Name 필드와 함께 details.Subject라는 하위 필드를 포함하고 있습니다.

2. find() 메서드로 전체 문서 조회

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

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

이 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5e9c28666c954c74be91e6de"), "Name" : "Chris" }
    {
       "_id" : ObjectId("5e9c28866c954c74be91e6df"),
       "Name" : "David",
       "details" : {
          "Subject" : "MongoDB"
   }
}

3. 점 표기법으로 하위 필드 조건 필터링

이제 여러 필드와 하위 필드를 기준으로 항목을 필터링하는 쿼리를 살펴보겠습니다. 아래 예제는 details.Subjectnull인 문서, 즉 해당 하위 필드가 존재하지 않는 문서만 조회합니다.

> db.demo638.find({"details.Subject":null});

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

{ "_id" : ObjectId("5e9c28666c954c74be91e6de"), "Name" : "Chris" }

결과 분석

Chris 문서에는 details 객체 자체가 없으므로 details.Subject도 존재하지 않아 조회 결과에 포함되었습니다. 반면 David 문서는 details.Subject 값이 "MongoDB"이므로 조건에서 제외됩니다.

참고로 MongoDB에서 null 조건은 필드 값이 실제로 null인 경우뿐 아니라 필드 자체가 존재하지 않는 경우도 함께 매칭한다는 점을 기억해 두면 유용합니다. 특정 필드가 존재하는 문서만 조회하고 싶다면 $exists 연산자를 함께 활용하는 것이 좋습니다.