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

MongoDB에서 배열의 특정 값 제거하기: $pull 연산자 활용법

MongoDB에서 문서 내 배열에 포함된 특정 값을 제거하려면 update() 메서드와 함께 $pull 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 $pull 연산자의 사용 방법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성

먼저 데모용 컬렉션을 만들고 문서를 삽입합니다.

> db.demo318.insertOne({Subject:["MySQL","MongoDB","Java"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e50ea6df8647eb59e562062")
}
> db.demo318.insertOne({Subject:["Spring","Hibernate"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e50ea78f8647eb59e562063")
}

위 명령은 두 개의 문서를 생성합니다. 첫 번째 문서는 MySQL, MongoDB, Java 과목을 담은 배열을, 두 번째 문서는 Spring과 Hibernate 과목을 담은 배열을 가지고 있습니다.

2. find()로 전체 문서 조회하기

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

> db.demo318.find();

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

{ "_id" : ObjectId("5e50ea6df8647eb59e562062"), "Subject" : [ "MySQL", "MongoDB", "Java" ] }
{ "_id" : ObjectId("5e50ea78f8647eb59e562063"), "Subject" : [ "Spring", "Hibernate" ] }

3. $pull 연산자로 특정 값 제거하기

이제 $pull 연산자를 사용해 Subject 배열에서 "Hibernate" 값을 제거하는 쿼리를 실행해 보겠습니다.

> db.demo318.update({Subject:"Hibernate"},{$pull:{"Subject":"Hibernate"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

쿼리 결과를 보면 nMatched가 1로, 조건에 일치하는 문서가 하나 있었으며, nModified가 1로 해당 문서가 실제로 수정되었음을 알 수 있습니다.

참고: MongoDB 4.2 이상 버전에서는 update() 대신 updateOne(), updateMany() 또는 updateMany() 계열 메서드를 사용하는 것이 권장됩니다. 예를 들어 db.demo318.updateOne({Subject:"Hibernate"},{$pull:{"Subject":"Hibernate"}})처럼 작성할 수 있습니다.

4. 삭제 후 결과 확인

다시 find() 메서드로 전체 문서를 조회해 보겠습니다.

> db.demo318.find();

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

{ "_id" : ObjectId("5e50ea6df8647eb59e562062"), "Subject" : [ "MySQL", "MongoDB", "Java" ] }
{ "_id" : ObjectId("5e50ea78f8647eb59e562063"), "Subject" : [ "Spring" ] }

출력 결과를 보면 두 번째 문서의 Subject 배열에서 "Hibernate"가 성공적으로 제거되고 "Spring"만 남아 있는 것을 확인할 수 있습니다.

정리

$pull 연산자는 배열 필드에서 지정한 값 또는 조건에 일치하는 모든 요소를 제거할 때 유용합니다. 특히 태그 목록, 카테고리 목록처럼 배열 형태로 데이터를 관리하는 경우, 불필요한 항목을 손쉽게 정리할 수 있어 실무에서 자주 활용됩니다.