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

MongoDB에서 키가 숫자일 때 하위 문서 값에 접근하는 방법

MongoDB에서 필드 이름(키)이 숫자로 되어 있을 때는 일반적인 점(.) 표기법으로 하위 문서(subdocument)의 값에 직접 접근하기 어렵습니다. 이 경우 대괄호([]) 표기법을 사용해야 합니다. 이 글에서는 실제 예제를 통해 그 방법을 단계별로 살펴보겠습니다.

예제 데이터 준비

하위 문서 값에 접근하는 방법을 확인하기 위해, 먼저 문서가 포함된 컬렉션을 생성하겠습니다.

> db.accessSubDocumentDemo.insertOne(
...    {
...       "Details" : {
...          "1" : {
...             "StudentLowerScore" : "33",
...             "StudentHoghScore" : "55"
...          },
...          "2" : {
...             "StudentLowerScore" : "45",
...             "StudentHoghScore" : "65"
...          },
...          "3" : {
...             "StudentLowerScore" : "39",
...             "StudentHoghScore" : "91"
...          },
...          "4" : {
...             "StudentLowerScore" : "41",
...             "StudentHoghScore" : "85"
...          }
...       }
...    }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd3baf0edc6604c74817cd6")
}

insertOne() 메서드가 정상적으로 실행되면 위와 같이 acknowledged 값이 true로 반환되고, 새로 생성된 문서의 ObjectId도 함께 확인할 수 있습니다.

저장된 문서 확인하기

find() 메서드와 pretty() 메서드를 함께 사용하면 컬렉션에 저장된 모든 문서를 보기 좋게 출력할 수 있습니다.

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

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

{
    "_id" : ObjectId("5cd3baf0edc6604c74817cd6"),
    "Details" : {
       "1" : {
          "StudentLowerScore" : "33",
          "StudentHoghScore" : "55"
       },
       "2" : {
          "StudentLowerScore" : "45",
          "StudentHoghScore" : "65"
       },
       "3" : {
          "StudentLowerScore" : "39",
          "StudentHoghScore" : "91"
       },
       "4" : {
          "StudentLowerScore" : "41",
          "StudentHoghScore" : "85"
       }
    }
}

숫자 키로 하위 문서 값 접근하기

이제 핵심 내용입니다. 키가 숫자일 때 하위 문서 값에 접근하는 방법을 살펴보겠습니다. 여기서는 숫자 1을 키로 가지는 하위 문서에 접근해 보겠습니다.

> db.accessSubDocumentDemo.findOne().Details["1"];

위 명령은 다음과 같은 결과를 반환합니다.

{ "StudentLowerScore" : "33", "StudentHoghScore" : "55" }

정리

MongoDB에서 키가 숫자인 하위 문서에 접근할 때는 findOne() 또는 find() 메서드로 문서를 가져온 뒤, Details["1"]처럼 대괄호 안에 문자열 형태의 숫자 키를 지정하면 됩니다. 이는 JavaScript 객체의 속성에 동적으로 접근하는 방식과 동일한 원리로, 점 표기법으로는 접근할 수 없는 특수한 키 이름에 유용하게 활용할 수 있습니다.