MongoDB에서 필드를 완전히 삭제하는 방법
MongoDB 문서에서 특정 필드를 완전히 제거하려면 $unset 연산자를 사용하면 됩니다. 이 연산자는 필드의 값을 null로 바꾸는 것이 아니라, 해당 필드 자체를 문서에서 삭제합니다.
기본적인 문법은 다음과 같습니다.
db.yourCollectionName.update({}, {$unset: {yourFieldName:1}}, false, true);여기서 마지막 두 개의 인자는 각각 upsert와 multi 옵션입니다. 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 필드가 사라지고 _id와 StudentName만 남아 있는 것을 확인할 수 있습니다.
참고: 최신 MongoDB 버전에서는 updateMany() 권장
MongoDB 4.2 이상 버전에서는 위와 같은 구식 update()> 메서드가 더 이상 권장되지 않습니다. 대신 updateMany()를 사용하면 동일한 작업을 더 명확하게 수행할 수 있습니다.
db.removeFieldCompletlyDemo.updateMany({}, { $unset: { StudentFavouriteSubject: "" } });$unset 연산자에서 지정하는 값(1 또는 빈 문자열)은 실제 의미가 없으며, 필드 이름만 정확히 지정하면 됩니다. 이 방식을 사용하면 여러 문서에 걸쳐 특정 필드를 안전하고 효율적으로 일괄 삭제할 수 있습니다.