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

MongoDB에서 객체 배열 내부에 중첩된 문자열 배열 업데이트하기 ($pull과 $[] 연산자 활용)

MongoDB에서 객체 배열 내부에 중첩된 문자열 배열 업데이트하기

MongoDB에서는 객체 배열 안에 문자열 배열이 다시 중첩된 형태의 데이터 구조를 자주 접하게 됩니다. 이렇게 깊이 중첩된 배열에서 특정 값을 제거하려면 $pull 연산자와 모든 위치 연산자($[])를 함께 사용하는 것이 가장 효과적입니다. 이번 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.

1단계: 컬렉션 생성 및 문서 삽입

먼저 문서를 담고 있는 컬렉션을 생성해 보겠습니다.

> db.demo412.insertOne(
...    {
...        "Information1" : [
...           {
...               "Information2" : [
...                  "John",
...                  "David"
...               ]
...           },
...           {
...               "Information2" : [
...                  "Mike"
...               ]
...           }
...        ]
...    }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e70f38b15dc524f70227683")
}

2단계: find() 메서드로 문서 조회

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

> db.demo412.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e70f38b15dc524f70227683"), "Information1" : [ { "Information2" : [ "John", "David" ] }, { "Information2" : [ "Mike" ] } ] }

3단계: $pull과 $[] 연산자로 중첩 배열 업데이트

다음은 MongoDB에서 객체 배열 내부에 중첩된 문자열 배열을 업데이트하는 쿼리입니다. 여기서는 Information2 배열에서 "Mike"라는 값을 제거해 보겠습니다.

> db.demo412.updateMany(
...    { _id: ObjectId("5e70f38b15dc524f70227683") },
...    { $pull : {'Information1.$[].Information2' : "Mike" } }
... );
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

쿼리의 핵심 요소를 살펴보면 다음과 같습니다.

  • $pull: 지정한 조건과 일치하는 요소를 배열에서 제거합니다.
  • $[](모든 위치 연산자): Information1 배열의 모든 객체 요소에 업데이트를 적용합니다. 이 연산자가 없으면 첫 번째로 일치하는 요소만 처리되므로 주의해야 합니다.

4단계: 업데이트 결과 확인

find() 메서드로 다시 문서를 조회하여 변경 사항을 확인합니다.

> db.demo412.find();

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

{ "_id" : ObjectId("5e70f38b15dc524f70227683"), "Information1" : [ { "Information2" : [ "John", "David" ] }, { "Information2" : [ ] } ] }

출력 결과를 보면 두 번째 객체의 Information2 배열에서 "Mike"가 성공적으로 제거되어 빈 배열이 된 것을 확인할 수 있습니다. 이처럼 $pull$[] 연산자를 조합하면 깊게 중첩된 배열 구조도 단 한 번의 쿼리로 손쉽게 업데이트할 수 있습니다.