본문 바로가기

Database/mongodb

[mongodb] 데이터 삽입, 수정 (insert, save, update)

collection생성까지 해보았습니다.


이번에는 데이터를 삽입, 수정, 삭제에 대해 알아보겠습니다.


데이터 삽입에는 insert()save()메소드를 사용합니다.


mongodb는 json(JavaScript Object Notation)형태로 데이터를 저장합니다. 


json 관련 링크: http://www.json.org/json-ko.html


inser()t와 save()메서드를 사용하여 데이터를 저장해 보고 차이점을 알아보겠습니다.


people 콜랙션까지 생성했다는 가정하에 시작하겠습니다.


다음과 같이 입력합니다.

db.people.insert({name:'Noh JunHyuk', gender:'male'})

db.people.save({name:'Noh JunHyuk', gender:'male'})


그리고 다음과 같이 검색 봅니다.

검색은 find()메서드를 사용합니다.


db.people.find()

다음과 같이 저장한 데이터가 출력됩니다.


_id라는 데이터가 자동으로 부여된걸 확인 할 수 있을겁니다. 다른 db를 공부하셨다면 주키라고 생각하면 됩니다. 


이제 insert()와 save()의 차이점을 살펴봅시다.


insert()메서드를 사용해 저장한 _id의 값을 가져와 저장해 보겠습니다.


그러면 다음과 같이 오류가 발생합니다.


동일한 _id값을 저정하려고 한다면 오류가 발생합니다.


다음으로 save()를 사용해 저장하고 찾아보면


다음과 같이 값이 저장된걸 확인할 수 있습니다.


save()는 _id가 존재한다면 오류를 발생시키지 않고 그 값을 수정합니다.


정리하면 save()메서드는 _id값이 존재하지 않다면 insert기능을 하여 데이터를 저장하고 


_id값이 존재하면 그 docuement에 데이터를 덮어써줍니다.(수정합니다.)




다음으로 수정에 대해 알아보겠습니다.


수정에는 update()와 save()메서드가 있습니다. save()는 위에서 살펴보았습니다.


save()는 기존의 데이터를 위에 덮어쓰는 방식이라서 기존 데이터가 사라집니다.


필드가 6개가 존재하고 save()메서드를 사용하여 2개의 필드를 저장한다면 6개 필드는 모두 사라지고 새로 저장하는 2개의 필드만 저장됩니다.


다시말하자면 save()메서드는 document단위로 데이터를 변경합니다.


update()메소드를 사용하면 특정 필드만 수정할 수 있습니다.


다음과 같이 수정하고 출력해보면



성별만 바뀐걸 확인할 수 있습니다.



정리해 보자면


삽입시 insert()와 save()

insert: _id가 동일한 값을 저장하려 한다면 오류 발생

save: _id가 동일해도 저장한다(수정한다) 기존에 저장된 데이터위에 덮어쓴다.


수정시 update()와 save()

update: 특정 필드만 수정할 수 있다.

save: 필드단위로 수정되지 않고 데이터를 덮어쓰므로 이전 데이터는 사라진다.