[MongoDB] 강좌 5편 Document 수정 – update() 메소드


이번 강좌에서는 document를 수정하는 update() 메소드에 대하여 알아보도록 하겠습니다.

정의

MongoDB에서는 update() 메소드를 통하여 데이터를 수정 할 수 있습니다.  이 메소드의 구조는 다음과 같습니다:

Collection 안의 document(들)을 수정합니다. 이 메소드를 통하여 특정 field 를 수정 할 수도 있고 이미 존재하는 document를 대체(replace) 할 수도 있습니다.

update() 메소드의 기본 옵션으로는 단 하나의 document를 수정합니다.

Parameter Type 설명
*query document 업데이트 할 document의 criteria 를 정합니다. find() 메소드 에서 사용하는 query 와 같습니다.
*update document document에 적용할 변동사항입니다.
upsert boolean Optional. (기본값: false) 이 값이 true 로 설정되면 query한 document가 없을 경우, 새로운 document를 추가합니다.
multi boolean Optional. (기본값: false)  이 값이 true 로 설정되면, 여러개의 document 를 수정합니다.
writeConcern document Optional.  wtimeout 등 document 업데이트 할 때 필요한 설정값입니다. 기본 writeConcern을 사용하려면 이 파라미터를 생략하세요. 자세한 내용은 매뉴얼을 참조해주세요.

 

샘플 데이터 추가

update 메소드를 연습해보기 위해 샘플 데이터를 추가하세요.

이제 예제를 통하여 update() 메소드 사용법을 배워보도록 하겠습니다.

예제1. 특정 field 업데이트 하기

특정 field의 값을 수정할 땐 $set 연산자를 사용합니다. 이 연산자를 사용해서 똑같은 방법을 새로운 field를 추가 할 수도 있습니다.

예제2. document를 replace 하기

이렇게 새로운 document 로 replace 할 때, _id는 바뀌지 않습니다.

예제3. 특정 field를 제거하기

여기서 score: 1 의 1 은 true 의 의미입니다.

예제4. criteria에 해당되는 document가 존재하지 않는다면 새로 추가하기

예제5. 여러 document의 특정 field를 수정하기

예제6-1. 배열 에 값 추가하기

예제6-2. 배열에 값 여러개 추가하기 + 오름차순으로 정렬하기

$sort 값을 내림차순으로 정렬하려면 -1 로 하면 됩니다.

배열이 document의 배열이고 그 embedded document의 특정 field에 따라서 정렬을 할 때는 다음과 같이 설정하면 됩니다.

예제7-1. 배열에 값 제거하기

예제7-2. 배열에서 값 여러개 제거하기

 

마무리하면서…

데이터를 수정하는 웬만한 케이스를 모두 다뤄보았습니다.  그러나 물론, 이 글에서 설명되지 않은 케이스들도 어느정도 있답니다. 위에 해당하지 않는 케이스가 있을 경우엔 매뉴얼을 참조해주세요.

다음 강좌에선 데이터 쿼리의 성능을 효율적으로 높여주는 Index 에 대하여 알아보도록 하겠습니다.

  • Hyun Jin Kim

    넘나 어려운것

  • 이미정

    질문이 있습니다! document의 key값은 ” “으로 문자를 적어주든 안적어주든 상관이 없나요?
    이전 포스팅에서는 key값이 모두 “abc”의 형태였는데 이번에 학습을 위해 insert해준 key값들은 abc의 형태네요
    “abc” == abc인건지 궁금합니다.

  • GT M

    php + sql 조금 공부하다 node.js 강좌통해서 여기까지 왔는데요 조금 어려운부분도 있지만 이런 강좌 써주셔서 감사합니다