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

MongoDB에서 하위 필드(Sub-field)로 쿼리하는 방법 – 점(.) 표기법 완벽 가이드

MongoDB에서 내장된 문서(embedded document)의 하위 필드를 기준으로 데이터를 조회하려면 점(.) 표기법(dot notation)을 사용하면 됩니다. 점 표기법은 상위 필드 이름과 하위 필드 이름을 마침표로 연결하여 중첩된 데이터에 직접 접근할 수 있게 해주는 방식입니다.

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

먼저 실습용 컬렉션을 만들고 문서를 삽입해 보겠습니다. insertOne() 메서드를 사용해 학생 정보가 담긴 문서 두 개를 추가합니다.

> db.queryBySubFieldDemo.insertOne(
    ... {
       ... "StudentPersonalDetails" : {"StudentName" : "John","StudentHobby" :"Photography"},
       ... "StudentScores" : {"MathScore" : 56}
    ... }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c92c2995259fcd195499808")
}
> db.queryBySubFieldDemo.insertOne(
    ... {
       ... "StudentPersonalDetails" : {"StudentName" : "Chris","StudentHobby" :"Reading"},
       ... "StudentScores" : {"MathScore" : 97}
    ... }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c92c2df5259fcd195499809")
}

위 문서 구조를 보면 StudentPersonalDetailsStudentScores라는 두 개의 상위 필드 안에 각각 하위 필드들이 중첩되어 있는 것을 확인할 수 있습니다.

2. 전체 문서 조회하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다. pretty()를 함께 사용하면 결과를 보기 좋게 정렬된 형태로 출력합니다.

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

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

{
    "_id" : ObjectId("5c92c2995259fcd195499808"),
    "StudentPersonalDetails" : {
       "StudentName" : "John",
       "StudentHobby" : "Photography"
    },
    "StudentScores" : {
       "MathScore" : 56
    }
}
{
    "_id" : ObjectId("5c92c2df5259fcd195499809"),
    "StudentPersonalDetails" : {
       "StudentName" : "Chris",
       "StudentHobby" : "Reading"
    },
    "StudentScores" : {
       "MathScore" : 97
    }
}

3. 하위 필드로 쿼리 실행하기

이제 핵심인 하위 필드 쿼리입니다. 상위 필드 이름 뒤에 점(.)을 붙이고 하위 필드 이름을 이어 적으면 됩니다. 예를 들어, 학생 이름이 "Chris"인 문서만 조회하려면 다음과 같이 작성합니다.

> db.queryBySubFieldDemo.find({"StudentPersonalDetails.StudentName":"Chris"}).pretty();

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

{
    "_id" : ObjectId("5c92c2df5259fcd195499809"),
    "StudentPersonalDetails" : {
       "StudentName" : "Chris",
       "StudentHobby" : "Reading"
    },
    "StudentScores" : {
       "MathScore" : 97
    }
}

정리 및 참고 사항

점 표기법을 사용할 때는 몇 가지 주의할 점이 있습니다.

  • 따옴표 필수: 점 표기법으로 된 필드 경로는 반드시 큰따옴표(")로 감싸야 합니다. 위 예제에서도 "StudentPersonalDetails.StudentName"처럼 따옴표 안에 전체 경로를 넣었습니다.
  • 깊은 중첩도 가능: 하위 필드가 여러 단계로 중첩되어 있어도 "상위필드.중간필드.최하위필드" 형태로 계속 연결해서 접근할 수 있습니다.
  • 배열 요소 접근: 배열 내 특정 위치의 요소에 접근할 때는 인덱스를 활용한 "필드명.0.하위필드" 형태도 사용할 수 있습니다.

이처럼 점 표기법만 익히면 복잡하게 중첩된 MongoDB 문서에서도 원하는 하위 필드 값을 손쉽게 조건으로 지정해 조회할 수 있습니다.