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

MongoDB 컬렉션에서 배열 필드 전체를 제거하는 방법 ($unset 활용)

MongoDB에서 컬렉션에 저장된 문서에서 배열 필드 전체를 삭제하려면 $unset 연산자를 사용하면 됩니다. $unset은 지정한 필드 자체를 문서에서 완전히 제거하는 연산자입니다. 이번 글에서는 예제 컬렉션을 생성하고, 배열 필드를 모든 문서에서 한 번에 제거하는 과정을 단계별로 살펴보겠습니다.

1. 예제 컬렉션 생성

먼저 insertOne() 메서드를 사용하여 배열 필드가 포함된 문서 두 개를 생성합니다.

> db.demo609.insertOne({"ListOfSubject":["MySQL","MongoDB"]});{
   "acknowledged" : true, "insertedId" : ObjectId("5e974695f57d0dc0b182d62c")
}
> db.demo609.insertOne({"ListOfSubject":["Java"]});{
   "acknowledged" : true, "insertedId" : ObjectId("5e97469af57d0dc0b182d62d")
}

2. 저장된 문서 확인하기

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

> db.demo609.find();

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

{ "_id" : ObjectId("5e974695f57d0dc0b182d62c"), "ListOfSubject" : [ "MySQL", "MongoDB" ] }
{ "_id" : ObjectId("5e97469af57d0dc0b182d62d"), "ListOfSubject" : [ "Java" ] }

3. $unset으로 배열 필드 제거하기

다음 쿼리는 컬렉션 내 모든 문서에서 ListOfSubject 배열 필드를 제거합니다.

> db.demo609.update({},{$unset:{"ListOfSubject":""}},{multi:true});
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

여기서 주목해야 할 부분은 세 번째 인자인 {multi:true} 옵션입니다. 이 옵션을 생략하면 조건에 일치하는 첫 번째 문서 하나만 수정되기 때문에, 컬렉션의 모든 문서에 변경 사항을 적용하려면 반드시 multi 옵션을 true로 설정해야 합니다. 실행 결과의 nModified 값이 2인 것을 통해 두 개의 문서가 모두 성공적으로 수정되었음을 확인할 수 있습니다.

4. 제거 결과 확인

다시 find() 메서드로 문서를 조회하면 ListOfSubject 필드가 완전히 사라진 것을 확인할 수 있습니다.

> db.demo609.find();

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

{ "_id" : ObjectId("5e974695f57d0dc0b182d62c") }
{ "_id" : ObjectId("5e97469af57d0dc0b182d62d") }

정리

이처럼 $unset 연산자와 multi:true 옵션을 함께 사용하면 컬렉션의 모든 문서에서 특정 배열 필드뿐 아니라 일반 필드도 간단하게 제거할 수 있습니다. 참고로 최신 버전의 MongoDB에서는 update() 대신 updateMany() 메서드를 사용하는 것이 권장되며, 이 경우 별도의 multi 옵션 없이도 여러 문서를 한 번에 수정할 수 있습니다.