MongoDB에서 배열에 저장된 특정 항목을 삭제하려면 $pull 연산자를 사용하면 됩니다. $pull은 지정한 조건과 일치하는 값을 배열에서 모두 제거해 주는 강력한 업데이트 연산자입니다.
1. 테스트용 컬렉션 생성하기
먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.
> db.demo224.insertOne({"ListOfTechnology":["Spring","Hibernate","Java"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3ee6d103d395bdc2134733")
}
> db.demo224.insertOne({"ListOfTechnology":["Groovy"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3ee6ec03d395bdc2134734")
}2. 현재 문서 확인하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다.
> db.demo224.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e3ee6d103d395bdc2134733"), "ListOfTechnology" : [ "Spring", "Hibernate", "Java" ] }
{ "_id" : ObjectId("5e3ee6ec03d395bdc2134734"), "ListOfTechnology" : [ "Groovy" ] }첫 번째 문서의 ListofTechnology 배열에는 Spring, Hibernate, Java 세 가지 기술이 들어 있는 것을 확인할 수 있습니다.
3. $pull로 배열 항목 제거하기
이제 $pull 연산자를 사용해 첫 번째 문서의 배열에서 "Java"를 제거해 보겠습니다.
> db.demo224.update({_id:ObjectId("5e3ee6d103d395bdc2134733")},{$pull:{"ListOfTechnology":"Java"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })실행 결과를 보면 nMatched : 1(조건에 일치하는 문서 1개), nModified : 1(실제 수정된 문서 1개)로 표시되어 업데이트가 성공적으로 수행되었음을 알 수 있습니다.
참고: 최신 버전의 MongoDB(3.x 이상)에서는 deprecated된 update() 대신 updateOne() 또는 updateMany() 메서드를 사용하는 것이 권장됩니다. 위 쿼리는 다음과 같이 작성할 수도 있습니다.
db.demo224.updateOne(
{ _id: ObjectId("5e3ee6d103d395bdc2134733") },
{ $pull: { ListOfTechnology: "Java" } }
);4. 변경 결과 확인하기
다시 find() 메서드로 전체 문서를 조회해 보겠습니다.
> db.demo224.find();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e3ee6d103d395bdc2134733"), "ListOfTechnology" : [ "Spring", "Hibernate" ] }
{ "_id" : ObjectId("5e3ee6ec03d395bdc2134734"), "ListOfTechnology" : [ "Groovy" ] }첫 번째 문서의 배열에서 "Java"가 성공적으로 제거되어 ["Spring", "Hibernate"]만 남은 것을 확인할 수 있습니다.
정리
- MongoDB에서 배열 요소를 제거할 때는 $pull 연산자를 사용합니다.
- $pull은 조건과 일치하는 모든 일치 항목을 배열에서 삭제합니다.
- 특정 값이 아닌 조건식(예:
{$gt: 10})으로도 제거할 수 있어 유연하게 활용 가능합니다. - 최신 MongoDB 환경에서는
updateOne()/updateMany()사용을 권장합니다.