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 값을 제거하는 두 단계 과정을 통해 배열 요소를 삭제할 수 있습니다.