MongoDB에서 배열 필드에 저장된 특정 요소를 삭제해야 하는 경우가 종종 있습니다. 이럴 때 update() 메서드와 $pull 연산자를 함께 사용하면 간단하게 해결할 수 있습니다. $pull 연산자는 지정한 값 또는 조건과 일치하는 요소를 배열에서 모두 제거하는 역할을 합니다.
1. 테스트용 컬렉션 생성
먼저 문서가 포함된 컬렉션을 생성해 보겠습니다.
> db.removingAnArrayElementDemo.insertOne({"UserMessage":["Hi","Hello","Bye"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cef97bdef71edecf6a1f6a4")
}2. 저장된 문서 조회하기
find() 메서드를 사용하여 컬렉션에 저장된 모든 문서를 확인합니다.
> db.removingAnArrayElementDemo.find().pretty();
출력 결과
{
"_id" : ObjectId("5cef97bdef71edecf6a1f6a4"),
"UserMessage" : [
"Hi",
"Hello",
"Bye"
]
}현재 UserMessage 배열에는 "Hi", "Hello", "Bye" 세 개의 문자열이 저장되어 있습니다.
3. $pull로 배열 요소 제거하기
다음은 update() 메서드와 $pull 연산자를 사용하여 배열에서 특정 요소("Hello")를 제거하는 쿼리입니다.
> db.removingAnArrayElementDemo.update(
{_id:ObjectId("5cef97bdef71edecf6a1f6a4")},
{ "$pull": { "UserMessage": "Hello" } }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
실행 결과에서 nMatched가 1, nModified가 1로 표시되었는데, 이는 조건에 일치하는 문서 1개가 성공적으로 수정되었음을 의미합니다.
4. 수정 결과 확인
배열 요소가 실제로 제거되었는지 문서를 다시 한번 조회해 보겠습니다.
> db.removingAnArrayElementDemo.find().pretty();
출력 결과
{
"_id" : ObjectId("5cef97bdef71edecf6a1f6a4"),
"UserMessage" : [
"Hi",
"Bye"
]
}출력 결과를 보면 "Hello"가 배열에서 사라진 것을 확인할 수 있습니다. 이처럼 $pull 연산자를 사용하면 배열 내 특정 값을 손쉽게 삭제할 수 있으며, 조건 쿼리와 함께 활용하면 여러 개의 요소를 한 번에 제거하는 것도 가능합니다.