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

MongoDB에서 특정 배열 인덱스의 객체를 업데이트하는 방법

MongoDB에서 배열 내 특정 인덱스에 위치한 객체를 수정하려면 update() 메서드를 사용하면 됩니다. 점(.) 표기법으로 배열 경로와 인덱스 번호를 지정하면 원하는 위치의 값만 정확하게 변경할 수 있습니다.

이번 글에서는 중첩 배열 구조를 가진 컬렉션을 만들고, 특정 인덱스의 객체 값을 업데이트한 뒤 결과를 확인하는 과정을 단계별로 살펴보겠습니다.

1. 테스트용 컬렉션 생성

먼저 insertOne() 메서드를 사용하여 문서가 포함된 컬렉션을 생성합니다. 이 예제에서는 학생 이름 정보를 담은 중첩 배열 구조를 사용합니다.

> db.updateObjectDemo.insertOne(
...   {
...      id : 101,
...      "StudentDetails":
...      [
...         [
...            {
...               "StudentName": "John"
...            },
...            { "StudentName": "Chris" }
...         ],
...         [ { "StudentName": "Carol" },
...         { "StudentName": "David" } ]
...      ]
...   }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ccdcd9b685b30d09a7111e0")
}

2. 저장된 문서 확인하기

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

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

위 쿼리를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

{
    "_id" : ObjectId("5ccdcd9b685b30d09a7111e0"),
    "id" : 101,
    "StudentDetails" : [
       [
          {
             "StudentName" : "John"
          },
          {
             "StudentName" : "Chris"
          }
       ],
       [
          {
             "StudentName" : "Carol"
          },
          {
             "StudentName" : "David"
          }
       ]
    ]
}

3. 특정 배열 인덱스의 객체 업데이트

이제 MongoDB에서 특정 배열 인덱스에 있는 객체를 업데이트하는 방법을 알아보겠습니다. 핵심은 $set 연산자와 함께 필드명.인덱스번호.필드명 형태의 경로를 지정하는 것입니다.

예를 들어 두 번째 배열([1])의 두 번째 요소([1]), 즉 인덱스 [1][1] 위치에 있는 "David"라는 이름을 "Mike"로 변경하려면 다음과 같이 작성합니다.

> db.updateObjectDemo.update({"id":101},{$set:{"StudentDetails.1.1.StudentName":"Mike"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과에서 nModified가 1로 표시되면 하나의 문서가 성공적으로 수정되었다는 의미입니다.

4. 업데이트 결과 검증

인덱스 [1][1] 위치의 객체가 실제로 "David"에서 "Mike"로 변경되었는지 find() 메서드로 확인해 보겠습니다.

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

출력 결과는 다음과 같습니다.

{
    "_id" : ObjectId("5ccdcd9b685b30d09a7111e0"),
    "id" : 101,
    "StudentDetails" : [
       [
          {
             "StudentName" : "John"
          },
          {
             "StudentName" : "Chris"
          }
       ],
       [
          {
             "StudentName" : "Carol"
          },
          {
             "StudentName" : "Mike"
          }
       ]
    ]
}

위 결과를 보면 StudentDetails 배열의 인덱스 [1][1]에 있던 "David"가 "Mike"로 성공적으로 변경된 것을 확인할 수 있습니다.

정리

MongoDB에서 배열의 특정 위치에 있는 객체를 업데이트하는 방법을 정리하면 다음과 같습니다.

  • update() 메서드와 $set 연산자를 함께 사용합니다.
  • 업데이트할 필드 경로를 배열명.인덱스.필드명 형식으로 지정합니다(예: StudentDetails.1.1.StudentName).
  • 배열 인덱스는 0부터 시작하므로 원하는 위치를 정확히 계산해야 합니다.

참고로 최신 MongoDB 버전에서는 update() 대신 updateOne(), updateMany() 메서드 사용이 권장됩니다. 이들 메서드도 동일한 점 표기법으로 특정 배열 인덱스의 값을 수정할 수 있습니다.