MongoDB 문서와 하위 문서란?
MongoDB는 NoSQL 데이터베이스로, 하나의 문서(Document) 안에 또 다른 문서를 중첩하여 저장할 수 있습니다. 이렇게 문서 내부에 포함된 문서를 하위 문서(Subdocument)라고 부르며, 배열 형태로 여러 개를 담을 수도 있습니다. 이 글에서는 하위 문서가 포함된 컬렉션을 생성하고, 데이터를 삽입·조회·업데이트하는 전체 과정을 예제와 함께 살펴보겠습니다.
문서 및 하위 문서 삽입 기본 문법
하위 문서를 포함한 문서를 삽입할 때의 기본 문법은 다음과 같습니다.
db.yourCollectionName.insertOne(
{
yourFieldName: yourValue,
yourFieldName : [
{
yourFiledName1,
yourFiledName2,
...
N
}
]
}
);예제: 하위 문서가 있는 컬렉션 생성
먼저 demo706이라는 컬렉션을 만들고, ApplicationConfiguration이라는 하위 문서 배열을 포함한 두 개의 문서를 삽입해 보겠습니다.
> db.demo706.insertOne(
... {
... PortalName: "GameApplication",
... ApplicationConfiguration : [
... {
... "URL": "jdbc:mysql://localhost/customer_tracker?autoReconnect=true",
... "USERNAME": "root",
... "PASSWORD": "root"
... }
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea6f557551299a9f98c93c6")
}
>
> db.demo706.insertOne(
... {
... PortalName: "WebMyBusinessApplication",
... ApplicationConfiguration : [
... {
... "URL": "jdbc:oracle:thin:@localhost:1521:xe",
... "USERNAME": "App",
... "PASSWORD": "App"
... }
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea6f558551299a9f98c93c7")
}두 번째 insertOne() 명령도 정상적으로 실행되어 새로운 ObjectId가 발급된 것을 확인할 수 있습니다.
find() 메서드로 전체 문서 조회하기
삽입된 모든 문서를 확인하려면 find() 메서드를 사용합니다.
> db.demo706.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5ea6f557551299a9f98c93c6"), "PortalName" : "GameApplication", "ApplicationConfiguration" : [ { "URL" : "jdbc:mysql://localhost/customer_tracker?autoReconnect=true", "USERNAME" : "root", "PASSWORD" : "root" } ] }
{ "_id" : ObjectId("5ea6f558551299a9f98c93c7"), "PortalName" : "WebMyBusinessApplication", "ApplicationConfiguration" : [ { "URL" : "jdbc:oracle:thin:@localhost:1521:xe", "USERNAME" : "App", "PASSWORD" : "App" } ] }update() 메서드로 문서 업데이트하기
이제 특정 문서의 필드 값을 변경해 보겠습니다. 아래 쿼리는 PortalName이 "WebMyBusinessApplication"인 문서를 찾아 해당 값을 "OnlineCustomerTracker"로 수정합니다. 값 변경에는 $set 연산자를 사용합니다.
> db.demo706.update({PortalName: "WebMyBusinessApplication"},{$set:{"PortalName":"OnlineCustomerTracker"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })실행 결과에서 nModified : 1은 한 개의 문서가 성공적으로 수정되었음을 의미합니다.
업데이트 후 결과 확인
수정이 완료되었으므로 다시 find() 메서드로 전체 문서를 조회해 보겠습니다.
> db.demo706.find();
출력 결과는 다음과 같습니다.
{ "_id" : ObjectId("5ea6f557551299a9f98c93c6"), "PortalName" : "GameApplication", "ApplicationConfiguration" : [ { "URL" : "jdbc:mysql://localhost/customer_tracker?autoReconnect=true", "USERNAME" : "root", "PASSWORD" : "root" } ] }
{ "_id" : ObjectId("5ea6f558551299a9f98c93c7"), "PortalName" : "OnlineCustomerTracker", "ApplicationConfiguration" : [ { "URL" : "jdbc:oracle:thin:@localhost:1521:xe", "USERNAME" : "App", "PASSWORD" : "App" } ] }정리
이번 예제를 통해 MongoDB에서 하위 문서를 포함한 문서를 삽입하고, find() 메서드로 조회하며, update() 메서드와 $set 연산자로 특정 필드를 수정하는 방법을 알아보았습니다. 참고로 최신 MongoDB 버전에서는 update() 대신 updateOne() 또는 updateMany() 사용이 권장되므로, 실무에서는 이들 메서드를 활용하는 것이 좋습니다.