MongoDB에서 배열 안에 포함된 객체에 접근하려면 점 표기법(dot notation)을 사용하면 됩니다. 이번 글에서는 실제 예제를 통해 배열 내 객체를 조회하는 방법을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성하기
먼저 insertOne() 메서드를 사용하여 문서가 포함된 컬렉션을 생성합니다. 아래 예제에서는 demo299라는 컬렉션에 두 개의 문서를 삽입합니다. 각 문서는 details라는 배열 필드를 가지고 있으며, 배열 안에는 SubjectName 필드를 포함한 객체들이 들어 있습니다.
> db.demo299.insertOne(
... {
... "id":100,
... "Name":"Robert",
... "details":[
... {
... "SubjectName":["C++","Python"]
... },
... {
... "SubjectName":["Spring","Hibernate"]
... }
... ]
... }
...);
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4d685a5d93261e4bc9ea4b")
}> db.demo299.insertOne(
... {
... "id":101,
... "Name":"Adam",
... "details":[
... {
... "SubjectName":["Python","JSP"]
... },
... {
... "SubjectName":["Servlet","Operating System"]
... }
... ]
... }
...);
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4d685b5d93261e4bc9ea4c")
}2. find() 메서드로 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo299.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5e4d685a5d93261e4bc9ea4b"), "id" : 100, "Name" : "Robert", "details" : [
{ "SubjectName" : [ "C++", "Python" ] },
{ "SubjectName" : [ "Spring", "Hibernate" ] }
]
}
{
"_id" : ObjectId("5e4d685b5d93261e4bc9ea4c"), "id" : 101, "Name" : "Adam", "details" : [
{ "SubjectName" : [ "Python", "JSP" ] }, { "SubjectName" : [ "Servlet", "Operating System" ] }
]
}3. 점 표기법으로 배열 내 객체 접근하기
이제 핵심 부분입니다. 배열 내부의 객체 필드에 접근하려면 배열필드명.객체필드명 형태의 점 표기법을 쿼리 조건에 사용합니다. 아래 쿼리는 details 배열 안의 SubjectName 값 중 "Servlet"이 포함된 문서를 찾습니다.
> db.demo299.find({"details.SubjectName":"Servlet"});실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5e4d685b5d93261e4bc9ea4c"), "id" : 101, "Name" : "Adam", "details" : [
{ "SubjectName" : [ "Python", "JSP" ] }, { "SubjectName" : [ "Servlet", "Operating System" ] }
]
}정리
MongoDB에서 배열 내 객체에 접근하는 방법은 매우 간단합니다. 쿼리 조건에서 점 표기법(예: "details.SubjectName")을 사용하면 MongoDB가 자동으로 배열의 모든 요소를 순회하며 조건에 일치하는 문서를 반환합니다. 별도의 특수 연산자 없이도 중첩된 구조의 데이터를 손쉽게 조회할 수 있다는 점이 MongoDB의 큰 장점 중 하나입니다.