MongoDB에서 pop() 메서드로 배열 값 제거하기
MongoDB에서 배열에 담긴 마지막 값을 꺼내고 싶다면 pop() 메서드를 사용하면 됩니다. 이 메서드는 자바스크립트 배열의 pop()과 동일하게 동작하며, 배열의 맨 뒤에 있는 요소를 제거한 후 해당 값을 반환합니다.
이번 글에서는 실제 예제를 통해 pop() 메서드를 사용해 문서 내 배열에서 값을 제거하고, 변경 사항을 데이터베이스에 반영하는 전체 과정을 살펴보겠습니다.
1단계: 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용해 테스트용 컬렉션을 만들고 문서를 하나 삽입합니다.
> db.persistChangeDemo.insertOne({"Name" : "Larry", "CreditScore": [500,700,760,100]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cdfc52cbf3115999ed51203")
}위 명령은 'Name' 필드와 'CreditScore'라는 배열 필드를 가진 문서를 persistChangeDemo 컬렉션에 추가합니다.
2단계: 현재 문서 확인하기
find() 메서드를 사용해 컬렉션의 모든 문서를 조회해 보겠습니다.
> db.persistChangeDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5cdfc52cbf3115999ed51203"),
"Name" : "Larry",
"CreditScore" : [
500,
700,
760,
100
]
}CreditScore 배열에는 현재 네 개의 값(500, 700, 760, 100)이 들어 있습니다.
3단계: pop() 메서드로 값 제거하기
이제 pop() 메서드를 호출해 배열의 마지막 값을 제거합니다.
> myDocument.CreditScore.pop(); 100
pop()은 제거된 값인 100을 반환합니다. 이 시점에서는 변경 사항이 클라이언트 측 변수(myDocument)에만 적용된 상태이므로, 이후 데이터베이스에 저장하는 과정이 반드시 필요합니다.
4단계: 변경 사항 저장하기
수정된 문서를 save() 메서드로 저장해 변경 사항을 데이터베이스에 반영합니다.
> db.persistChangeDemo.save(myDocument);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })결과에서 nModified가 1로 표시되면 한 개의 문서가 성공적으로 수정된 것입니다.
5단계: 최종 결과 확인하기
다시 한 번 find() 메서드로 문서를 조회해 변경이 정상적으로 적용되었는지 확인합니다.
> db.persistChangeDemo.find().pretty();
출력 결과는 다음과 같습니다.
{
"_id" : ObjectId("5cdfc52cbf3115999ed51203"),
"Name" : "Larry",
"CreditScore" : [
500,
700,
760
]
}CreditScore 배열에서 마지막 값인 100이 제거되고 세 개의 값(500, 700, 760)만 남아 있는 것을 확인할 수 있습니다.
정리 및 참고 사항
pop() 메서드는 항상 배열의 마지막 요소만 제거한다는 점에 유의하세요. 만약 배열의 첫 번째 요소를 제거하고 싶다면 shift() 메서드를 사용해야 하며, 특정 조건에 맞는 요소를 제거하려면 $pull 연산자를 활용하는 것이 좋습니다.
또한 몽고 셸(Shell) 환경에서 위와 같이 pop()을 사용하려면 먼저 해당 문서를 변수에 할당한 후 작업해야 하며, 변경 후에는 반드시 save() 또는 update 관련 메서드로 저장해야 실제 데이터베이스에 반영됩니다.