MongoDB에서 배열에 저장된 숫자 중 짝수만 골라내거나 제거하고 싶다면 $mod 연산자와 $pull 연산자를 함께 사용하면 됩니다. $mod는 나머지 연산을 수행하는 연산자로, [2, 0] 조건을 지정하면 '2로 나눈 나머지가 0인 값', 즉 짝수를 정확히 찾아낼 수 있습니다.
아래에서 실제 예제를 통해 단계별로 살펴보겠습니다.
1. 테스트 컬렉션 생성하기
먼저 숫자 배열을 포함하는 문서로 컬렉션을 생성합니다.
> db.pullEvenNumbersDemo.insertOne({"AllNumbers":[101,102,104,106,108,109,110,112,14,17,18,21]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd45b072cba06f46efe9eea")
}2. 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다.
> db.pullEvenNumbersDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
{
"AllNumbers" : [
102,
104,
106,
108,
109,
110,
112,
14,
17,
18,
21
]
}3. $pull과 $mod로 배열에서 짝수 제거하기
이제 핵심 단계입니다. updateMany() 메서드 안에서 $pull 연산자에 $mod: [2, 0] 조건을 조합하면, 배열 요소 중 2로 나누어 떨어지는 값(짝수)이 모두 제거됩니다.
> db.pullEvenNumbersDemo.updateMany({},{ "$pull": { "AllNumbers": { "$mod": [ 2, 0 ] } } } );
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }쿼리 실행 결과 matchedCount: 1, modifiedCount: 1이 반환되며, 하나의 문서가 성공적으로 수정되었음을 알 수 있습니다.
4. 최종 결과 확인하기
업데이트가 완료된 후 문서를 다시 조회해 보겠습니다.
> db.pullEvenNumbersDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5cd45b072cba06f46efe9eea"),
"AllNumbers" : [
101,
109,
17,
21
]
}배열을 확인해 보면 102, 104, 106 등 짝수는 모두 사라지고 101, 109, 17, 21처럼 홀수만 남은 것을 확인할 수 있습니다.
핵심 정리
$mod: [2, 0]→ 2로 나눈 나머지가 0인 값, 즉 짝수를 의미합니다.$pull→ 지정한 조건과 일치하는 배열 요소를 모두 제거합니다.- 반대로 홀수만 제거하고 싶다면
$mod: [2, 1]로 조건을 변경하면 됩니다.
이처럼 $mod와 $pull의 조합은 MongoDB 배열 데이터를 조건 기반으로 손쉽게 필터링할 수 있는 강력한 방법입니다.