MongoDB의 $unset 연산자

Shihab Sikder 2023년6월20일
  1. MongoDB의 $unset 연산자
  2. $unset 연산자를 사용하여 MongoDB의 모든 문서에서 필드 삭제
MongoDB의 $unset 연산자

이 기사에서는 $unset 연산자가 MongoDB에서 작동하는 방식에 대해 설명합니다. 또한 이 연산자를 사용하여 MongoDB 컬렉션의 모든 문서에서 필드를 삭제하는 방법을 보여줍니다.

MongoDB의 $unset 연산자

$unset은 엔티티에서 필드를 삭제하는 데 사용되는 연산자입니다. MongoDB의 update 메소드에 사용되며 해당 메소드에서 일치하는 항목이 없는 경우 아무 영향을 미치지 않습니다.

MongoDB 데이터베이스에 다음 문서가 있다고 가정합니다.

> db.employee.find().pretty()
{"_id":1,   "name":"Alice", "salary": 1500}
{"_id":2,   "name":"Bob",   "salary": 2500}
{"_id":3,   "name":"Jhon",  "salary": 3500, "role":"Owner"}
{"_id":4,   "name":"Grace", "salary": 4500}

문서에 4개의 엔터티가 있고 find() 메서드가 매개 변수 없이 사용됩니다. employee 컬렉션의 모든 엔터티를 반환하고 pretty()는 형식이 지정된 방식으로 엔터티를 인쇄하는 데 사용됩니다.

이제 어떤 이유로 역할 필드를 표시하고 싶지 않다고 가정해 보겠습니다. 따라서 행에서 삭제해야 합니다.

쿼리는 다음과 같아야 합니다.

> db.employee.update({_id:3}, {$unset : {"role":""}} )
> db.employee.find().pretty()
{"_id":1,   "name":"Alice", "salary": 1500}
{"_id":2,   "name":"Bob",   "salary": 2500}
{"_id":3,   "name":"Jhon",  "salary": 3500}
{"_id":4,   "name":"Grace", "salary": 4500}

이제 id = 3인 첫 번째 일치 문서에서 role 필드를 삭제합니다.

multiple의 줄임말인 multi라는 또 다른 옵션은 기본적으로 false 값을 가집니다.

값이 true인 경우 일치하는 모든 문서에 대한 update 쿼리에 영향을 미칩니다.

$unset 연산자를 사용하여 MongoDB의 모든 문서에서 필드 삭제

MongoDB 컬렉션의 모든 문서에서 salary 필드를 제거하라는 요청을 받았다고 가정해 보겠습니다. 각 ID에 대해 update 명령을 한 번 사용하면 시간이 더 오래 걸립니다.

오히려 다음과 같이 해야 합니다.

> db.employee.update({}, {$unset:{"salary": ""}}, {multi: true})
> db.employee.find().pretty()
{"_id":1,   "name":"Alice"  }
{"_id":2,   "name":"Bob"    }
{"_id":3,   "name":"Jhon"   }
{"_id":4,   "name":"Grace"  }

update 쿼리에서 빈 개체를 사용하고 multitrue를 입력했습니다. 기본적으로 {}는 개체의 모든 문서를 선택하고 {multi: true}update 메서드에서 일치하는 모든 문서에 영향을 미칩니다.

기본 형식은 다음과 같습니다(공식 문서 참조).

db.collection.updateOne(<filter>, <update>, <options>)
db.collection.updateMany(<filter>, <update>, <options>)
db.collection.replaceOne(<filter>, <update>, <options>)

update 메서드에서 $unset 연산자를 사용할 수 있으며 options에서 multi를 사용할 수 있습니다.

공식 문서에서 $unset 연산자에 대해 자세히 알아보세요.

Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website

관련 문장 - MongoDB Operator