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

MongoDB에서 배열 필드의 모든 요소 삭제하는 방법 ($set 연산자 활용)

MongoDB에서 배열 필드에 저장된 모든 요소를 한 번에 삭제하고 싶다면 $set 연산자를 사용하면 됩니다. 배열을 빈 배열([])로 설정하는 방식으로, 간단한 쿼리 하나로 모든 문서의 배열 내용을 비울 수 있습니다.

기본 문법

배열 필드의 모든 요소를 삭제하는 기본 문법은 다음과 같습니다.

db.yourCollectionName.update({}, { $set : {"yourFieldName": [] }} , {multi:true} );

여기서 {multi:true} 옵션이 중요합니다. 이 옵션을 지정하면 조건에 일치하는 모든 문서에 대해 업데이트가 적용됩니다. 옵션을 생략하면 첫 번째로 일치하는 문서 하나만 수정되므로 주의해야 합니다.

예제 컬렉션 생성

실제 동작을 확인하기 위해 문서가 포함된 컬렉션을 먼저 생성해 보겠습니다. 강사 이름과 강의 기술 과목을 담은 배열 필드를 가진 문서 두 개를 삽입합니다.

> db.deleteAllElementsInArrayDemo.insertOne({"InstructorName":"Larry","InstructorTechnicalSubject":["Java","MongoDB"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8fb971d3c9d04998abf00e")
}
> db.deleteAllElementsInArrayDemo.insertOne({"InstructorName":"Mike","InstructorTechnicalSubject":["C","C++","Python"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8fb98ad3c9d04998abf00f")
}

삽입된 문서 확인

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

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

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

{
    "_id" : ObjectId("5c8fb971d3c9d04998abf00e"),
    "InstructorName" : "Larry",
    "InstructorTechnicalSubject" : [
        "Java",
        "MongoDB"
    ]
}
{
    "_id" : ObjectId("5c8fb98ad3c9d04998abf00f"),
    "InstructorName" : "Mike",
    "InstructorTechnicalSubject" : [
        "C",
        "C++",
        "Python"
    ]
}

배열 필드의 모든 요소 삭제하기

이제 $set 연산자를 사용해 "InstructorTechnicalSubject" 배열 필드의 모든 요소를 삭제하는 쿼리를 실행해 보겠습니다.

> db.deleteAllElementsInArrayDemo.update({}, { $set : {"InstructorTechnicalSubject": [] }} , {multi:true} );
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

실행 결과에서 nMatched: 2, nModified: 2를 확인할 수 있습니다. 즉, 두 개의 문서가 모두 일치했고, 두 문서 모두 성공적으로 수정되었다는 의미입니다.

삭제 결과 검증

수정이 정상적으로 적용되었는지 다시 find() 메서드로 확인해 보겠습니다.

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

실행 결과는 다음과 같습니다. "InstructorTechnicalSubject" 배열 필드의 모든 요소가 삭제되고 빈 배열만 남은 것을 확인할 수 있습니다.

{
    "_id" : ObjectId("5c8fb971d3c9d04998abf00e"),
    "InstructorName" : "Larry",
    "InstructorTechnicalSubject" : [ ]
}
{
    "_id" : ObjectId("5c8fb98ad3c9d04998abf00f"),
    "InstructorName" : "Mike",
    "InstructorTechnicalSubject" : [ ]
}

정리

MongoDB에서 배열 필드의 모든 요소를 삭제하는 가장 간단한 방법은 $set 연산자로 해당 필드를 빈 배열([])로 설정하는 것입니다. {multi:true} 옵션을 함께 사용하면 컬렉션 내 모든 문서에 일괄 적용할 수 있어 효율적입니다. 참고로 최신 MongoDB 버전에서는 update() 대신 updateMany() 메서드를 사용하는 것이 권장되며, 이 경우 multi 옵션 없이도 여러 문서를 한 번에 수정할 수 있습니다.