MongoDB에서 $push 연산자로 하위 문서 추가하기
MongoDB에서 배열 형태로 저장된 하위 문서(sub-document)에 새로운 하위 문서를 추가하려면 $push 연산자를 사용하면 됩니다. 이번 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.
1단계: 테스트용 컬렉션 생성
먼저 문서가 포함된 컬렉션을 하나 생성해 보겠습니다.
> db.subDocumentToSubDocumentDemo.insertOne(
{
"_id" :101,
"StudentName" : "Larry",
"StudentAge" : 21,
"StudentDetails" : [
{
"StudentCountryName" : "US",
"StudentFavouriteSubjectList" : [ ]
}
]
}
);
{ "acknowledged" : true, "insertedId" : 101 }컬렉션이 정상적으로 생성되었으며, _id : 101인 문서가 삽입되었습니다.
2단계: find() 메서드로 문서 조회하기
다음은 find() 메서드를 사용하여 컬렉션 내 모든 문서를 조회하는 쿼리입니다.
> db.subDocumentToSubDocumentDemo.find().pretty();
이 쿼리는 다음과 같은 결과를 출력합니다.
{
"_id" : 101,
"StudentName" : "Larry",
"StudentAge" : 21,
"StudentDetails" : [
{
"StudentCountryName" : "US",
"StudentFavouriteSubjectList" : [ ]
}
]
}현재 StudentDetails 배열에는 국가명이 'US'인 하위 문서 하나만 존재하고, 좋아하는 과목 목록은 비어 있는 상태입니다.
3단계: $push 연산자로 하위 문서 배열에 새 하위 문서 추가
이제 MongoDB에서 하위 문서 배열 안에 새로운 하위 문서를 추가하는 쿼리를 실행해 보겠습니다.
> db.subDocumentToSubDocumentDemo.update(
{ "_id": 101 },
{
"$push": {
"StudentDetails": {
"StudentCountryName" : "UK",
"StudentFavouriteSubjectList" : ["MongoDB","Java" ]
}
}
}
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })실행 결과 nModified : 1로 표시되며, 이는 해당 문서가 성공적으로 수정되었음을 의미합니다.
4단계: 업데이트 결과 확인하기
변경이 제대로 적용되었는지 전체 문서를 다시 한번 조회해 보겠습니다.
> db.subDocumentToSubDocumentDemo.find().pretty();
출력 결과는 다음과 같습니다.
{
"_id" : 101,
"StudentName" : "Larry",
"StudentAge" : 21,
"StudentDetails" : [
{
"StudentCountryName" : "US",
"StudentFavouriteSubjectList" : [ ]
},
{
"StudentCountryName" : "UK",
"StudentFavouriteSubjectList" : [
"MongoDB",
"Java"
]
}
]
}정리
위 예제에서 확인할 수 있듯이, $push 연산자를 사용하면 기존 배열의 끝에 새로운 하위 문서를 간단하게 추가할 수 있습니다. StudentDetails 배열에는 이제 'US'와 'UK' 두 개의 하위 문서가 함께 들어 있으며, 새로 추가된 하위 문서에는 과목 목록도 포함되어 있습니다.
참고로 중복 값을 허용하지 않고 배열에 요소를 추가하고 싶다면 $addToSet 연산자를 사용할 수도 있습니다. 반면 순서와 무관하게 항상 배열 끝에 추가하는 것이 목적이라면 $push가 가장 적합한 선택입니다.