MongoDB는 스키마가 유연한 NoSQL 데이터베이스로, 중첩된(nested) 구조를 가진 계층형 JSON 문서를 자연스럽게 저장할 수 있습니다. 이 글에서는 insertOne() 메서드를 활용하여 여러 단계로 중첩된 계층형 JSON 문서를 생성하고 조회하는 방법을 예제와 함께 살펴봅니다.
계층형 JSON 생성 기본 문법
MongoDB에서 계층형 JSON을 만들려면 다음과 같은 문법을 사용합니다. 필드 안에 또 다른 객체(내장 문서)를 넣고, 그 안에 배열까지 중첩시킬 수 있습니다.
db.demo716.insertOne(
{
yourFieldName1,
yourFieldName2,
...
N,
"fieldName": {
yourFieldName1,
yourFieldName2,
...
N,
"fieldname":
[
{
yourFieldName1,
yourFieldName2,
...
N
}
]
}
}
);컬렉션에 계층형 문서 삽입하기
이제 실제 예제를 통해 컬렉션에 계층형 JSON 문서를 생성해 보겠습니다. 아래 예제는 최상위 필드들과 함께, 내장 문서인 UserInformation 안에 배열 형태의 OtherInformation까지 포함한 3단계 중첩 구조를 담고 있습니다.
> db.demo716.insertOne(
... {
... "id": 101,
... "UserEmailId": "John@gmail.com",
... "UserPassword": "123456",
... "UserInformation": {
... "UserName": "Chris",
... "UserAge": 26,
... "UserCountryName": "US",
... "OtherInformation":
... [
... {
... "TeacherName":"Robert",
... "SubjectName":"MongoDB",
... "CollegeName":"MIT"
... }
... ]
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea9b1ff85324c2c98cc4c2f")
}삽입이 성공적으로 완료되면 acknowledged: true와 함께 자동 생성된 고유 식별자인 ObjectId가 반환됩니다.
find() 메서드로 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다. 여기에 pretty() 메서드를 함께 사용하면 들여쓰기가 적용된 가독성 좋은 형태로 출력됩니다.
> db.demo716.find().pretty();
위 명령은 다음과 같은 결과를 출력합니다.
{
"_id" : ObjectId("5ea9b1ff85324c2c98cc4c2f"),
"id" : 101,
"UserEmailId" : "John@gmail.com",
"UserPassword" : "123456",
"UserInformation" : {
"UserName" : "Chris",
"UserAge" : 26,
"UserCountryName" : "US",
"OtherInformation" : [
{
"TeacherName" : "Robert",
"SubjectName" : "MongoDB",
"CollegeName" : "MIT"
}
]
}
}정리
이처럼 MongoDB에서는 insertOne() 메서드 하나만으로 객체와 배열이 중첩된 계층형 JSON 문서를 손쉽게 저장할 수 있습니다. 관계형 데이터베이스라면 여러 테이블로 나누어 조인해야 할 복잡한 데이터도 MongoDB에서는 하나의 문서 안에 직관적으로 표현할 수 있다는 점이 큰 장점입니다.