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

MongoDB 문서에서 필드를 완전히 제거하는 방법 ($unset 연산자 활용)

MongoDB에서 필드를 완전히 삭제하는 방법

MongoDB 문서에서 특정 필드를 완전히 제거하려면 $unset 연산자를 사용하면 됩니다. 이 연산자는 필드의 값을 null로 바꾸는 것이 아니라, 해당 필드 자체를 문서에서 삭제합니다.

기본적인 문법은 다음과 같습니다.

db.yourCollectionName.update({}, {$unset: {yourFieldName:1}}, false, true);

여기서 마지막 두 개의 인자는 각각 upsertmulti 옵션입니다. false, true로 설정하면 조건에 일치하는 모든 문서에서 해당 필드가 제거됩니다.

예제용 컬렉션 생성하기

문법을 실제로 이해하기 위해 몇 개의 문서를 포함한 컬렉션을 먼저 만들어 보겠습니다.

> db.removeFieldCompletlyDemo.insertOne({"StudentName":"Larry","StudentFavouriteSubject":["Java","C","C++","Python"]});{ "acknowledged" : true, "insertedId" : ObjectId("5c6ef55a6fd07954a48906a3") }> db.removeFieldCompletlyDemo.insertOne({"StudentName":"Mike","StudentFavouriteSubject":["Javascript","HTML5","CSS3"]});{ "acknowledged" : true, "insertedId" : ObjectId("5c6ef57b6fd07954a48906a4") }> db.removeFieldCompletlyDemo.insertOne({"StudentName":"Sam","StudentFavouriteSubject":["MongoDB","MySQL","SQL Server"]});{ "acknowledged" : true, "insertedId" : ObjectId("5c6ef59c6fd07954a48906a5") }

컬렉션의 모든 문서 조회하기

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

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

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

{ "_id" : ObjectId("5c6ef55a6fd07954a48906a3"), "StudentName" : "Larry", "StudentFavouriteSubject" : [ "Java", "C", "C++", "Python" ]}{ "_id" : ObjectId("5c6ef57b6fd07954a48906a4"), "StudentName" : "Mike", "StudentFavouriteSubject" : [ "Javascript", "HTML5", "CSS3" ]}{ "_id" : ObjectId("5c6ef59c6fd07954a48906a5"), "StudentName" : "Sam", "StudentFavouriteSubject" : [ "MongoDB", "MySQL", "SQL Server" ]}

$unset으로 필드 제거하기

이제 모든 문서에서 StudentFavouriteSubject 필드를 제거해 보겠습니다.

> db.removeFieldCompletlyDemo.update({}, {$unset: {StudentFavouriteSubject:1}}, false, true);WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })

실행 결과를 보면 3개의 문서가 일치했고(nMatched: 3), 3개의 문서가 실제로 수정되었음(nModified: 3)을 알 수 있습니다.

결과 검증하기

필드가 정상적으로 제거되었는지 다시 한번 전체 문서를 조회해서 확인해 보겠습니다.

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

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

{ "_id" : ObjectId("5c6ef55a6fd07954a48906a3"), "StudentName" : "Larry" }{ "_id" : ObjectId("5c6ef57b6fd07954a48906a4"), "StudentName" : "Mike" }{ "_id" : ObjectId("5c6ef59c6fd07954a48906a5"), "StudentName" : "Sam" }

모든 문서에서 StudentFavouriteSubject 필드가 사라지고 _idStudentName만 남아 있는 것을 확인할 수 있습니다.

참고: 최신 MongoDB 버전에서는 updateMany() 권장

MongoDB 4.2 이상 버전에서는 위와 같은 구식 update() 메서드가 더 이상 권장되지 않습니다. 대신 updateMany()를 사용하면 동일한 작업을 더 명확하게 수행할 수 있습니다.

db.removeFieldCompletlyDemo.updateMany({}, { $unset: { StudentFavouriteSubject: "" } });

$unset 연산자에서 지정하는 값(1 또는 빈 문자열)은 실제 의미가 없으며, 필드 이름만 정확히 지정하면 됩니다. 이 방식을 사용하면 여러 문서에 걸쳐 특정 필드를 안전하고 효율적으로 일괄 삭제할 수 있습니다.