반응형

이번에는 몽고DB에서 데이타를 수정하는 방법을 알아본다.

update 또한 insert와 마찬가지로 함수 형태가 크게 세개로 구성된다.

update 명령은 단일 도큐먼트 혹은 다수의 도큐먼트를 수정할 수 있고 updateOne은 단일 도큐먼트만,

updateMany는 다수의 도큐먼트만 수정 가능하다.

MongoDB 3.2버전 이후부터는 update() 함수 대신 updateOne()과 updateMany() 함수를 사용하기를 권장한다.

 

1. 수정(update)

데이타를 수정할 때 사용하는 명령이며, MSQL의 update와 매칭되는 명령이다.

insert 명령과 마찬가지로 JSON 형태로 데이터를 수정할 수 있다.

 

위와 같은 데이터가 있다고 가정해보자.

name이 '홍길동'인 age의 값 20을 23으로 변경하고자 하면 아래와 같이 명령을 실행할 수 있다.

db.users.update({name: '홍길동'}, {$set:{age: 23}});

 

위와 같이 정상적으로 입력된 것을 확인할 수 있다.

데이터를 조회해보니 age값이 20에서 23으로 변경되었다.

MongoDB에서 update명령을 사용하여 특정 필드의 값을 변경할 때는 $set 연산자를 사용하여야 한다.

만약 사용하지 않는다면 어떻게 될까?

 

$set 연산자를 제거하고 나이를 25살로 변경하여 입력해보았더니 위와 같은 결과가 나왔다.

$set 연산자를 사용하지 않을 경우 입력한 데이터 자체를 통째로 덮어버리게 된다.

즉, 기존에 존재하던 name 필드까지 사라져버리는 것이다.

그렇기에 update 명령 사용시에는 반드시 주의해야 한다. $set 사용하는 것을 실수해서 

다른 필드를 날려버리는 경우가 종종 발생할 수 있다.

 

update 명령은 단일 도큐먼트도 수정 가능하지만 다수의 도큐먼트도 수정 가능하다.

다수의 도큐먼트 수정시에는 multi 옵션을 사용하여 수정할 수 있다.

먼저 테스트를 위해 위와 같이 데이터를 준비하였다.

위 두 데이터 전체의 나이를 25로 변경해보도록 하겠다.

db.users.update({}, {$set: {age: 25}}, {multi: true});

앞의 조건 {}은 전체 필드를 수정하겠다는 의미이다.

조회해보면 다음과 같은 결과가 나온다.

age 필드가 모두 정상적으로 25로 변경되었다.

만약 multi 옵션을 사용하지 않는다면 기본적으로 단일 도큐먼트 수정이 되기 때문에 가장 처음 데이터만 변경이 된다.

 

2. 단일 데이터 수정(updateOne)

update와 사용법은 동일하다. 단지, 단일 도큐먼트만 수정될 뿐이다.

db.users.updateOne({name: '홍길동'}, {$set: {age: 25}});

이와 같이 명령을 실행하면 name 필드가 '홍길동'인 age 값을 25로 변경한다.

완전히 동일하다.

 

3. 다수 데이터 수정(updateMany)

update의 multi 옵션을 자동으로 사용해준 명령이라고 보면 된다.

위의 두개 도큐먼트에 대한 age를 모두 27로 변경해보겠다.

db.users.updateMany({}, {$set: {age: 27}});

multi 옵션 없이 조건에 해당하는 모든 필드가 알아서 수정이 된다.

updateOne과 updateMany은 update 명령에 비해 좀 더 명시적으로 업데이트되었다고 보면 될 것 같다.

 

반응형

+ Recent posts