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: 필드단위로 수정되지 않고 데이터를 덮어쓰므로 이전 데이터는 사라진다.


데이터 삽입과 수정을 하면서 find()메서드를 사용해 보았습니다.


find()메서드를 좀 더 알아보겠습니다.


collection을 생성하고 데이터를 저장해 보겠습니다.


db.createCollection('people') //콜랙션 생성


//데이터 저장

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

db.people.insert({name:'Jun YunJe', gender:'female'})

db.people.insert({name:'Lee SukJun', gender:'male'})

db.people.insert({name:'Ma MiYoung', gender:'female'})

db.people.insert({name:'Goh MinSub', gender:'male'})

db.people.insert({name:'Kim UiJin', gender:'male'})

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


find메서드를 사용해 검색하면 다음과 같이 출력됩니다.



원하는 데이터를 골라 출력해 보겠습니다.


이름이 Noh JunHyuk인 데이터만 출력해 본다면



성별인 남자인 데이터만 출력해 본다면





원하지 않는 필드를 제외하고 출력해 보겠습니다.



위와 같이 find()메서드의 두번째 매개변수에 원하지 않는 필드 이름을 적고 0이나 false로 지정합니다.


성별은 남자에 name속성을 출력하지 않을려 한다면



위와 같이 잘 출력되는걸 확인할 수 있습니다.




한 객체만 검색하고 싶을때는 findOne()메서드를 사용합니다.


findOne()메서드를 사용하면 find()메서드를 사용해 추출할 수 있는 배열의 가장 첫번째 에 위치한 데이터를 추출합니다.




데이터를 정렬하려면 sort()메서드를 사용합니다.


이름을 오름차순으로 정렬한다면



내림차순으로 정렬한다면



+ Recent posts