Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 조건과 일치하지 않는 배열 요소를 제거하는 방법 ($pull, $ne 활용)

MongoDB에서 조건과 일치하지 않는 요소 제거하기

배열에서 특정 조건과 일치하지 않는 요소를 제거하려면 $pull 연산자를 사용하고, 조건을 지정할 때는 $ne 연산자를 활용합니다. MongoDB의 $ne는 필드 값이 지정된 값과 같지 않은 문서를 선택하는 비교 연산자로, 이 두 연산자를 함께 사용하면 원하는 조건에 맞지 않는 배열 요소를 손쉽게 삭제할 수 있습니다.

1. 샘플 컬렉션 생성하기

먼저 테스트용 문서가 포함된 컬렉션을 생성해 보겠습니다.

> db.demo410.insertOne(
...    {
...      details: [{isMarried:false}, {isMarried:true}, {isMarried:false}, {isMarried:"Chris"}]
...    }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e70efc515dc524f70227681")
}

2. 문서 조회하기

find() 메서드를 사용하여 컬렉션의 모든 문서를 확인합니다.

> db.demo410.find();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e70efc515dc524f70227681"), "details" : [ { "isMarried" : false }, { "isMarried" : true }, { "isMarried" : false }, { "isMarried" : "Chris" } ] }

3. 조건에 맞지 않는 요소 삭제 쿼리 실행

이제 isMarried 값이 true가 아닌 모든 요소를 배열에서 제거하는 쿼리를 실행해 보겠습니다. updateMany()와 함께 $elemMatch로 조건을 확인한 뒤, $pull과 $ne를 조합하여 해당 요소들을 삭제합니다.

> db.demo410.updateMany(
...    { "details": { "$elemMatch": { "isMarried": { "$ne": true } } } },
...    { "$pull": { "details": { "isMarried": { "$ne": true } } } }
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

실행 결과 matchedCount와 modifiedCount가 각각 1로 반환되며, 하나의 문서가 성공적으로 수정되었음을 알 수 있습니다.

4. 삭제 후 결과 확인

다시 find() 메서드로 컬렉션의 문서를 조회하여 변경 사항을 확인합니다.

> db.demo410.find();

조건(isMarried: true)과 일치하지 않던 요소들이 모두 제거되고, 다음과 같이 true인 요소만 남은 것을 확인할 수 있습니다.

{ "_id" : ObjectId("5e70efc515dc524f70227681"), "details" : [ { "isMarried" : true } ] }

핵심 정리

- $pull: 지정한 조건과 일치하는 배열 요소를 제거하는 업데이트 연산자입니다.
- $ne: 필드 값이 특정 값과 같지 않음을 의미하는 비교 연산자입니다.
- $elemMatch: 배열 내 요소가 주어진 조건을 충족하는지 확인하는 데 사용됩니다.

이처럼 $pull과 $ne를 조합하면 MongoDB 배열에서 특정 조건과 일치하지 않는 요소들을 간단하게 제거할 수 있습니다.