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 객체의 속성에 동적으로 접근하는 방식과 동일한 원리로, 점 표기법으로는 접근할 수 없는 특수한 키 이름에 유용하게 활용할 수 있습니다.