MongoDB/MongoDB 기본 CRUD

[MongoDB 기본 CRUD] 14. upsert 연산하기, 여러 문서의 특정 필드 수정하기, 배열에 값 추가&제거하기

Fletcher 2024. 8. 14. 21:59

 

반갑습니다!

 

이번 포스트에서는 도큐먼트 수정에 관련된 내용 중

유용한 주요 문법 나머지 내용을 다 살펴보고

update에 관한 내용을 마무리하도록 하겠습니다 ^^

 

 

 

 

 

 

1. 특정 조건을 만족하는 문서가 없을 경우 새로 추가하기 : upsert

 

제일 먼저 알아볼 내용은 upsert 연산인데요 ^^

 

경우에 따라 이런 상황이 있을 수 있습니다

만약 해당 조건에 부합하는 도큐먼트가 있으면 특정 데이터를 수정하고,

해당 조건에 부합하는 기존의 도큐먼트가 없으면 아예 데이터를 새로 추가하는 상황 말이죠 ^^

 

이럴 때 upsert 조건을 true로 설정해주시면 되겠습니다!

기존의 데이터 중에는 name 필드가 "민준"인 도큐먼트가 없는데요

upsert 조건을 true로 지정해서 연산을 시행했을 때 결과가 어떤지 확인해보겠습니다 ^^

 

 

 

도큐먼트 조회 결과 가장 밑단에 name 필드의 값이 "민준"인 데이터가

생성되어 추가된 출력 결과를 확인할 수 있겠습니다 ^^

 

 

 

 

 

 

 

2. 여러 문서의 특정 필드를 수정하기

 

이번에는 여러 문서의 특정 필드 값을 수정해보겠는데요

age 필드의 값이 40 이하 조건을 만족하는 도큐먼트들이 여러개가 있을 것입니다

 

이 때 updateOne() 함수를 사용하면 해당 조건을 만족하는 여러 도큐먼트들 중

최상단 한 개에만 해당 수정사항이 반영이 됩니다

 

조건을 만족하는 모든 도큐먼트에 대해 동일한 수정 사항을 반영시키려면

updateMany() 함수를 사용해주시면 되겠는데요 ^^

 

matchedCount 값이 5, modifiedCount 값 역시 5인 것을 보아

조건을 만족하는 도큐먼트가 5개가 조회되었고,

이 5개의 도큐먼트 모두에 해당 수정 사항이 잘 반영되었다는 결과를 볼 수 있겠습니다 ^^

 

find() 함수를 이용해서 전체 데이터를 조회하여 직접 확인해볼까요?

 

 

 

전체 데이터를 조회해보면 age 컬럼의 값이 40 이하인 도큐먼트들에 대해서

hobbies 필드의 값이 1개의 elements만 갖는 것을 볼 수 있겠습니다

 

만약 해당 필드의 데이터 타입이 배열(Array)인 경우

콘솔 창에는 해당 리스트의 원소 갯수만 출력이 됩니다 ^^

 

각 원소가 무엇무엇이 있는지 확인하려면

해당 도큐먼트의 hobbies 필드의 값을 더블클릭하시면 되는데요

그럼 하위 목록(해당 array의 elements)에 대해서 조회할 수 있습니다 ^^

 

 

 

 

 

 

 

 

3. 배열에 값 추가하기 : $push

 

hobbies 필드의 값은 데이터 타입이 배열(Array)였죠?

그럼 여러 데이터들이 대괄호( [ ] )로 묶여있는 일종의 리스트인데요

이 컬렉션 타입에 값을 추가할 수 있을까요?

 

이 때 수정 사항으로 $push 키워드를 사용해주시면 되겠습니다 ^^

추가할 값을 지정해주시면 되는데요

저는 name이 "민준"인 도큐먼트에 대해서 hobbies 컬럼에 "운동" 항목을 추가해보겠습니다!

 

 

 

해당 도큐먼트의 hobbies 필드의 값인 배열의 원소로

기존에 존재하던 "독서"와 새로 추가한 "운동"이

콘솔 창에 출력되는 것을 확인할 수 있겠습니다 ^^

 

 

 

 

 

 

4. 배열에서 값 제거하기 : $pull

 

방금 전, 배열 타입에 새로운 원소를 추가했었는데요

그러면 반대로 특정 원소를 제거할 수도 있을까요?

 

이 때 바로 $pull 키워드를 사용하시면 되겠습니다 ^^!

사용법은 $push와 동일합니다

 

 

 

조회해보니 hobbies 필드의 값에 "운동"이란 element가 삭제되어

콘솔 창에 출력되지 않는 것을 확인할 수 있겠습니다 ^^

 

 

 

 

이번 포스트까지 해서 update와 관련된

유용한 주요 문법들에 대해 알아보았습니다 ^^

 

다음 포스트에서는 특정 도큐먼트를 삭제하는 delete()에 대해서 알아보고

기본 CRUD와 관련된 내용을 마무리하도록 하겠습니다!