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

MongoDB에서 인덱스로 배열 요소 제거하기 – $unset과 $pull 활용법

MongoDB에서 배열의 특정 인덱스에 있는 요소를 제거하려면 $unset 연산자와 $pull 연산자를 함께 사용해야 합니다. MongoDB는 배열 요소를 한 번에 직접 삭제하는 단일 연산자를 제공하지 않기 때문에, 두 단계로 나누어 처리해야 합니다.

배열 요소 제거 기본 문법

먼저 $unset으로 해당 위치의 값을 null로 만든 뒤, $pull로 null 값을 배열에서 제거하는 방식입니다. 기본 문법은 다음과 같습니다.

db.yourCollectionName.update({},{$unset:{"yourArrayListName.yourPosition":yourPositionValue}};
db.yourCollectionName.update({},{$pull:{"yourArrayListName":null}});

예제 컬렉션 생성

문법을 이해하기 위해 실제 컬렉션을 만들어 보겠습니다. 다음 쿼리로 컬렉션에 도큐먼트를 삽입합니다.

>db.removeArrayElements.insertOne({"StudentName":"Larry","StudentAge":23,"TechnicalSubject":["C","C++","Java","MongoDB"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c6ea4879c4643706aef56d2")
}

도큐먼트 조회

find() 메서드를 사용하면 컬렉션의 모든 도큐먼트를 확인할 수 있습니다.

> db.removeArrayElements.find().pretty();

실행 결과는 다음과 같습니다.

{
    "_id" : ObjectId("5c6ea4879c4643706aef56d2"),
    "StudentName" : "Larry",
    "StudentAge" : 23,
    "TechnicalSubject" : [
        "C",
        "C++",
        "Java",
        "MongoDB"
    ]
}

인덱스로 배열 요소 제거하기

이제 특정 인덱스의 배열 요소를 제거하는 쿼리를 실행해 보겠습니다. 먼저 $unset으로 3번 인덱스의 값을 해제한 후, $pull로 null 값을 제거합니다.

> db.removeArrayElements.update({},{$unset:{"TechnicalSubject.3":1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.removeArrayElements.update({},{$pull:{"TechnicalSubject":null}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

위 예제에서는 3번 인덱스(네 번째 위치)에 있던 "MongoDB" 요소가 제거되었습니다. 변경된 결과를 확인해 보겠습니다.

> db.removeArrayElements.find().pretty();

실행 결과:

{
    "_id" : ObjectId("5c6ea4879c4643706aef56d2"),
    "StudentName" : "Larry",
    "StudentAge" : 23,
    "TechnicalSubject" : [
        "C",
        "C++",
        "Java"
    ]
}

정리

출력 결과를 보면 3번 인덱스(네 번째 자리)의 "MongoDB" 요소가 배열에서 성공적으로 제거된 것을 확인할 수 있습니다. 이처럼 MongoDB에서는 $unset으로 해당 인덱스의 값을 null 처리한 후, $pull 연산자로 null 값을 제거하는 두 단계 과정을 통해 배열 요소를 삭제할 수 있습니다.