Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 객체 내부 배열에 새 항목 추가하는 방법 – $elemMatch와 $push 활용법

MongoDB에서 객체 내부에 중첩된 배열에 새 항목을 추가하려면 $elemMatch 연산자와 $push 연산자를 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 그 방법을 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 insertOne() 메서드를 사용하여 학생 정보가 담긴 문서를 삽입하고 컬렉션을 생성해 보겠습니다. 이 문서에는 StudentOtherDetails라는 객체 배열이 포함되어 있으며, 각 객체 안에 또 다른 배열인 StudentFriendName이 중첩되어 있습니다.

> db.pushNewItemsDemo.insertOne(
    {
       "_id" :1,
       "StudentScore" : 56,
       "StudentOtherDetails" : [
          {
             "StudentName" : "John",
             "StudentFriendName" : [
                "Bob",
                "Carol"
             ]
          },
          {
             "StudentName" : "David",
             "StudentFriendName" : [
                "Mike",
                "Sam"
             ]      
          }
       ]
    }
);
{ "acknowledged" : true, "insertedId" : 1 }

2. 저장된 문서 조회하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다.

> db.pushNewItemsDemo.find();

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : 1, "StudentScore" : 56, "StudentOtherDetails" : [ { "StudentName" : "John", "StudentFriendName" : [ "Bob", "Carol" ] }, { "StudentName" : "David", "StudentFriendName" : [ "Mike", "Sam" ] } ] }

3. 객체 내부 배열에 새 항목 푸시하기

다음은 $elemMatch로 특정 조건에 맞는 배열 요소를 찾고, 위치 연산자($)와 $push를 조합하여 해당 객체 내부의 배열 끝에 새 항목을 추가하는 쿼리입니다. 여기서는 StudentName이 "David"인 요소를 찾아 그 안의 StudentFriendName 배열에 "James"를 추가합니다.

>db.pushNewItemsDemo.update({"_id":1,"StudentOtherDetails":{"$elemMatch":{"StudentName":"David"}}},
    {"$push":{"StudentOtherDetails.$.StudentFriendName":"James"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

4. 업데이트 결과 확인하기

변경 사항이 제대로 반영되었는지 문서를 다시 한번 조회해 보겠습니다.

> db.pushNewItemsDemo.find();

실행 결과를 보면 David의 StudentFriendName 배열에 "James"가 성공적으로 추가된 것을 확인할 수 있습니다.

{ "_id" : 1, "StudentScore" : 56, "StudentOtherDetails" : [ { "StudentName" : "John", "StudentFriendName" : [ "Bob", "Carol" ] }, { "StudentName" : "David", "StudentFriendName" : [ "Mike", "Sam", "James" ] } ] }

핵심 개념 정리

  • $elemMatch: 배열 내에서 주어진 조건과 일치하는 요소를 찾는 데 사용됩니다.
  • 위치 연산자($): $elemMatch로 매칭된 배열 요소의 위치를 가리켜 해당 요소만 정확하게 업데이트할 수 있게 해줍니다.
  • $push: 지정한 배열의 마지막에 새 값을 추가합니다.

참고로 최신 MongoDB 버전에서는 update() 대신 updateOne() 또는 updateMany() 메서드를 사용하는 것이 권장됩니다. 동작 방식은 동일하며, deprecated 경고 없이 더 명확한 의미로 업데이트를 수행할 수 있습니다.