반응형
이번에는 저장되어 있는 데이터를 업데이트하는 방법이다. 업데이트는 update 함수를 이용한다.
- update() 함수
- 몽고디비의 update()함수를 이용한다. 여기에 4개의 아규먼트가 들어간다.
- criteria, objNew, upsert, multi
- criteria
- 업데이트 하고싶은 레코드를 쿼리하는데 사용된다.
- objNew
- 업데이트할 데이터를 위해 사용
- upsert
- 업데이트 하고픈 해당 레코드가 있으면, 그레코드값을 업데이트하고, 없으면 새로 만들어서 업데이트한다.
- multi
- 업데이트하기 위해 매칭된 모든 다큐먼트를 업데이트 하거나, 아니면 하나의 다큐먼트만 업데이트 한다.
- 디폴트는 하나의 다큐먼트만 업데이트 함.
- $ 오퍼레이터로 동작함.
- 쉘에서의 예
- db.media.update( { "Title" : "Matrix, the"}, {"Type" : "DVD", "Title" :"Matrix, the", "Released" : "1999", "Genre" : "Action"}, true)
- 위의 예는 Title 이 Matrix, the 인 다큐먼트를 찾아서
- 모든 저장되어 있던 데이터를 지워버리고,
- "Type" : "DVD", "Title" :"Matrix, the", "Released" : "1999", "Genre" : "Action" 이 값으로 세로 셋팅한다.
- 위의 예에서 세번째 인자인 true 는 upsert를 의미한다.
- 위의 예의 문제점
- 원래 저장되어 있던 값은 그대로 두고, 원하는 필드값만 바꾸고자 한다면 다음과 같이 사용한다.
- 기존 데이터를 지우지 않고 원하는 업데이트 하기.
- 숫자 값을 증가시키기 $inc
- 현재 다큐멘트에 count 라는 필드가 있고, 이를 하나씩 증가시키고 싶을때가 있다.
- 이때, 저장되어 있는 값을 불러서 count = count +1 과 같은 생각을 할 필요없이
- 자동으로 증가시켜 주는, $inc를 사용한다. 이것은 위에서 설명한 업데이트 함수에서 두번째 아규먼트 자리에서 사용한다.
- 예)
- db.media.update ( { "Title" : "One Piece"}, {$inc: {"count " : 4} } )
- 타이틀이 원피스인 다큐먼트를 찾아서, 그안에 count 라는 필드값을 4만큼 증가시킨다.
- 즉, count 가 얼마인지 확인할 필요없이, 그 저장되어있는 Read값에 4만큼 자동 증가시킴.
- 원하는 필드값만 바꾸기 $set
- 현재 다큐먼트에 nick_name 이라는 필드를 포함하여 여러 필드가 존재하는 경우.
- nick_name 만 새로운 값으로 셋팅하고 싶을때
- $set 을 이용하여, 업데이트 함수의 두번째 아규먼트에서 사용한다.
- 예)
- db.user.update ( { "id" : aa@aaa.com }, {$set : { nick_name : "macro" } } )
- id 가 aa@aaa.com 인 다큐먼트를 찾아서, 기존데이터는 그대로 두고, 닉네임만 바꾼다.
- 원하는 필드만 없애기 $unset
- 현재 다큐먼트에 nick_name필드를 더이상 사용하지 않아서 없애는 경우
- $unset 을 사용한다.
- 예)
- db.user.update ( { "id" : aa@aaa.com }, {$unset : { nick_name : "macro" } } )
- 닉네임 필드만 삭제된다.
- 필드가 배열로 되어있고, 이 배열에 값을 업데이트 할 경우
- 필드가 배열이 아닌데, 추가하려고 하면 에러가 난다.
- $push : 기존 배열 필드에 값을 추가한다. 한번에 하나의 값을 추가할때 사용
- $pushAll : 기존 배열 필드에 여러 값(배열)을 한번에 추가.
- $pop : 배열 필드에서 값을 하나 제거한다. 맨앞이나 맨뒤 하나.
- {$pop : {favorite : 1}} : favorite 배열에서 맨끝의 값을 제거
- {$pop : {favorite : -1}} : favorite 배열에서 맨앞의 값을 제거
- $pull : 원하는 값을 배열에서 뺀다.
- {$pull : {favorite : "abd"}} : favorite 배열에서 abd 를 제거
- $pullAll : 원하는 값들을 배열에서 제거
- {$pullAll : {favorite : ["Griffin, Louis","Griffin, Peter","Griffin, Brian"] }
- 복합적인 사용
- update함수의 두번째 아규먼트에, 바로 위에서 설명한 것들을 콤마 를 이용해서 적어주면 된다.
- db.media.update( { "Title" : "Matrix, the"}, {$set : {"Type" : "DVD", "Title" :"Matrix, the"}, $inc :{ count : 2}}, true)
반응형