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

MongoDB에서 find()와 update()로 중첩 배열에 새 항목 추가하는 방법

MongoDB 중첩 배열에 새 항목 추가하기

MongoDB에서 문서 내부의 중첩 배열(nested array)에 새 항목을 추가하려면 find() 메서드와 update() 메서드를 함께 활용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.

1. 컬렉션 생성 및 문서 삽입

먼저 insertOne() 메서드를 사용하여 문서가 포함된 컬렉션을 생성합니다.

> db.demo124.insertOne(
...    {
...       "Name" : "John",
...       "Id" : 101,
...       "ProjectDetails" : [{
...          "ProjectName1" : "Online Book",
...          "ProjectName2" : "Online Banking"
...    }, {
...          "ProjectName1" : "Online Library Management System",
...          "ProjectName2" : "School Management System"
...       }]
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e2f2c8b140daf4c2a3544bb")
}

위 예제에서는 'John'이라는 사용자 정보와 함께 두 개의 프로젝트 세부 정보(ProjectDetails)를 담고 있는 중첩 배열이 포함된 문서를 생성했습니다.

2. 삽입된 문서 확인

find() 메서드를 사용하여 컬렉션의 모든 문서를 조회합니다.

> db.demo124.find();

실행 결과는 다음과 같습니다.

{
   "_id" : ObjectId("5e2f2c8b140daf4c2a3544bb"), "Name" : "John", "Id" : 101, "ProjectDetails" : [
      { "ProjectName1" : "Online Book", "ProjectName2" : "Online Banking" },
      { "ProjectName1" : "Online Library Management System", "ProjectName2" : "School Management System" }
   ] 
}

3. 중첩 배열에 새 항목 추가하는 쿼리

이제 forEach() 반복문과 update() 메서드를 조합하여 중첩 배열의 각 요소에 새 필드를 추가하는 쿼리를 실행합니다.

> db.demo124.find().toArray().forEach(
...    function(d){
...       for(var i = 0; i< d.ProjectDetails.length; ++i) {
...          d.ProjectDetails[i]['ProjectName3'] = 'Online Snake Game';
...       }
...       db.demo124.update({_id: d._id}, d);
...    }
... );

위 쿼리의 동작 원리는 다음과 같습니다.

- toArray(): find() 결과를 배열로 변환하여 자바스크립트에서 순회할 수 있게 합니다.
- forEach(): 각 문서마다 콜백 함수를 실행합니다.
- for 반복문: ProjectDetails 배열의 모든 요소를 순회하며 'ProjectName3' 키에 'Online Snake Game' 값을 추가합니다.
- update(): 변경된 문서를 _id를 기준으로 데이터베이스에 다시 저장합니다.

4. 업데이트 결과 확인

업데이트 후 find().pretty() 메서드로 문서를 다시 조회해 보겠습니다.

> db.demo124.find().pretty();

실행 결과는 다음과 같습니다.

{
   "_id" : ObjectId("5e2f2c8b140daf4c2a3544bb"),
   "Name" : "John",
   "Id" : 101,
   "ProjectDetails" : [
      {
         "ProjectName1" : "Online Book",
         "ProjectName2" : "Online Banking",
         "ProjectName3" : "Online Snake Game"
      },
      {
         "ProjectName1" : "Online Library Management System",
         "ProjectName2" : "School Management System",
         "ProjectName3" : "Online Snake Game"
      }
   ]
}

마무리

출력 결과를 보면 중첩 배열인 ProjectDetails의 모든 요소에 'ProjectName3' : 'Online Snake Game' 항목이 성공적으로 추가된 것을 확인할 수 있습니다. 이처럼 find()와 update()를 조합한 자바스크립트 반복 처리 방식을 활용하면 MongoDB에서 중첩 배열 구조를 유연하게 수정할 수 있습니다.

참고로, 최신 MongoDB 버전에서는 update() 대신 updateOne() 또는 updateMany() 사용이 권장되며, $set 연산자와 위치 연산자($[], $[])를 활용하면 더욱 효율적인 배열 업데이트가 가능합니다.