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

MongoDB 중첩 배열의 항목을 비우는 방법 – $set 연산자 완벽 가이드

MongoDB에서 중첩된 배열(Nested Array) 항목 지우기

MongoDB에서 중첩된 배열 내부의 항목을 모두 비우고 싶다면 $set 연산자를 사용하면 됩니다. 이번 글에서는 실제 예제를 통해 컬렉션 생성부터 데이터 확인, 그리고 중첩 배열을 비우는 전체 과정을 단계별로 살펴보겠습니다.

1단계: 테스트용 컬렉션 생성하기

먼저 예제에 사용할 컬렉션을 만들어 보겠습니다. 아래 쿼리는 학생 정보와 프로젝트 세부 사항이 중첩된 구조의 문서를 하나 삽입합니다.

> db.clearingItemsInNestedArrayDemo.insertOne( {
...     "StudentName" : "John",
...     "StudentDetails" : [
...        {
...           "ProjectName" : "Online Banking",
...           "ProjectDetails" : [
...              {
...                 "TechnologyUsed" : "Java",
...                 "TeamSize": 5
...              }
...           ]
...        }
...    ]
... }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9930b4330fd0aa0d2fe4ce")
}

위 문서는 StudentName 필드와 함께 StudentDetails라는 배열을 가지며, 그 안에 다시 ProjectDetails라는 중첩 배열이 포함되어 있습니다.

2단계: 저장된 문서 확인하기

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

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

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{
    "_id" : ObjectId("5c9930b4330fd0aa0d2fe4ce"),
    "StudentName" : "John",
    "StudentDetails" : [
       {
          "ProjectName" : "Online Banking",
          "ProjectDetails" : [
             {
                "TechnologyUsed" : "Java",
                "TeamSize" : 5
             }
          ]
       }
    ]
}

3단계: $set 연산자로 중첩 배열 비우기

이제 본격적으로 중첩 배열의 항목을 지워 보겠습니다. update() 메서드와 $set 연산자를 조합하여 StudentDetails 필드를 빈 배열([])로 설정합니다.

> db.clearingItemsInNestedArrayDemo.update({"StudentName": "John"}, {"$set": {"StudentDetails": []}});
Updated 1 existing record(s) in 4ms
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과를 보면 nMatched : 1, nModified : 1로 표시되며, 이는 조건에 일치하는 1개의 문서가 성공적으로 수정되었음을 의미합니다.

4단계: 수정 결과 검증하기

마지막으로 다시 한 번 find() 메서드를 실행하여 중첩 배열의 항목이 실제로 삭제되었는지 확인해 보겠습니다.

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

결과는 다음과 같습니다.

{
    "_id" : ObjectId("5c9930b4330fd0aa0d2fe4ce"),
    "StudentName" : "John",
    "StudentDetails" : [ ]
}

정리

이처럼 MongoDB에서 중첩 배열의 모든 항목을 제거하는 것은 매우 간단합니다. 핵심은 $set 연산자를 사용해 해당 배열 필드를 빈 배열([])로 덮어쓰는 것입니다. 참고로 최신 MongoDB 버전에서는 update() 대신 updateOne() 또는 updateMany() 메서드를 사용하는 것이 권장되므로, 실무 환경에서는 이를 활용하는 것이 좋습니다.