티스토리 뷰

프로그래밍

MongoDB 간략한 정리.

ReturnToHome 2017. 6. 6. 15:49

최근 MEAN Web Development 라는 책을 참고하여 MEAN 에 대해 공부를 아주 조금씩 하고 있습니다. 1주일에 한장정도? -.-;; 그것도 아주 정독한다고 하기 보다는 일단 먼저 한번 훑자는 생각으로 대충 이해하고 넘어가는 방식으로 말이죠. 그렇게 얼마전부터 시작하여 MEAN 에 대해, 그리고 NodeJS 설치 및 간단한 예제들을 넘어 4장, MongoDB 소개를 보고 있는데요, 앞단의 NodeJS 경우에는 맛보기 예제들이기도 하고 있는 예제로만 정리를 하기에는 너무 방대한 것들이 남아있는 것 같아서 나중에 잘알게 되면 정리하자 라고 넘어갔는데 이번 MongoDB 에서는 최소한의 명령어들 정도는 알고 있어야 할 것 같아서 살짝 정리를 해보려 합니다.

아래 내용들은 역시 제가 개인적으로 이해하기 위해 정리한 기초적인 내용들이기에 상당수준의 레벨 또는 너무 상세한 것을 바라신 분들에게는 조금 아쉬울 수도 있겠네요.. 뭔가 해결책을 찾고자하고 블로그를 찾아주신 것에 대해서 죄송한 말씀을 먼저 올리며 정리한 내용들을 써내려 가보겠습니다. 


아래 글들 역시 한번에 정리한 것이 아니라 몇일동안 야금야금 정리한 것이기에 반말, 존댓말 등 섞여있으니 양해부탁드립니다.


* MongoDB

NoSQL 이며 문서형 데이터 베이스. 참고로 MEMCACHED, REDIS 의 경우 KEY-VALUE, HBASE 의 경우 컬럼형 데이터 베이스 라고 불리운다.


* 아래 db.collection.method 를 포함한 MongoDB 에 대한 모든 기본적인 definition https://docs.mongodb.com/manual/reference/method/ 에 다있으니 참고바랍니다.



- DB Schema 변경

> use {db_schema}

ex) use mean

# mongo {db_schema}

ex) mongo mean

- MongoDB 서버에 있는 데이터베이스 목록 보기

> show dbs

-- 맛보기 (아래 CRUD 에서 자세히 다룸)

- 데이터 등록

> db.posts.insert({'title': 'First Post', 'user': 'andy', 'seq': 1})


- 데이터 조회

> db.posts.find()

- Collection 보기

- MongoDB 는 DB > Collection > Data 가 들어있는 구조.

위의 예제처럼 db.posts.~~ 일 경우 posts 라는 Collection 에 Data 를 넣은 것.

만약 db.member.~~ 할 경우 member 라는 Collecntion 에 Data 가 저장되는 것이다.

* 이해하기 쉽게 테이블이라고 생각하면 될 듯

DB 안에 posts 라는 테이블 안에 Data 를 넣는다.

- Collection 목록

> show collection

- Collection 삭제

> db.posts.drop()

위의 순서를 차례대로 했다면 db.posts.find() 하여도 처음에 입력하였던 First Post 라는 데이터를 볼 수 없다.

(Collection (테이블) 이 삭제되었으니..)


- 기본적인 CRUD


** Key 값은 홑따옴표, 쌍따옴표를 붙이지 않아도 된다.

- insert()

db.posts.insert({'title': 'Second Post', 'user': 'ronin'})

- update()

db.posts.update({'user': 'ronin'}, {'title': 'Second Post Modify'}, {upsert: true}, {multi: true})

>> WriteResult({ "nMatched": 1, "uUpserted": 0, "nModified": 1 })

--> {'user': 'ronin'}: user 의 값이 ronin 인 데이터를 찾고

--> {'title': 'Second Post Modify'}: 앞에서 찾아진 데이터의 title 값을 Second Post Modify 로 변경

--> {upsert: true}: 조회된 데이터가 없을 시 새로 INSERT 

--> {multi: true}: 조회된 모든 데이터를 변경

** db.posts.update({찾을 조건}, {변경 데이터}, {merge into 여부(true|false)}, {멀티행 처리여부(true|false)}) 로 구성되어있다.

--> 찾을 조건 : where 절에 해당하는 변경 할 문서의 조건 값

--> 변경 데이터 : 변경 되어질 데이터

--> MERGE INTO 여부 : 조건에 해당하는 데이터가 없을 시 새로 insert 여부 (default false)

--> 멀티행 처리여부 : 1건에 대해서만 변경을 할 것인지, 아니면 조회된 모든 데이터에 대해 변경을 할 것인지 (default false)

* upsert, multi 조건은 생략 가능하다. --> db.posts.update({'user': 'ronin'}, {'title': 'Second Post Modify'})

그리고 주의 할 것은 여기서 다시 db.posts.find() 로 데이터를 보자면 해당 데이터의 값이

{ "_id" : ObjectId("34h83jn89hnjkndf3j4n1"), "title" : "Second Post Modify" }

라고만 나올 것이다. 뒤의 변경 데이터로 입력된 데이터가 제외하고는 모든 데이터가 없어진 것이다. (user 라는 값이 없어졌죠?)

그렇기에 update 시에는 아래와 $set 을 붙여주어야 한다.

>> db.posts.update({'user': 'Ronon'}, {$set: {'title': 'Second Post Modify'})

>> WriteResult({ "nMatched": 1, "uUpserted": 0, "nModified": 1 })

>> db.posts.find()

>> { "_id" : ObjectId("34h83jn89hnjkndf3j4n1"), "title" : "Second Post Modify", "user": "ronin" }

- save()

db.posts.save({'_id': 'id_3', 'title': 'Save Post', 'user': 'ronin'})

--> _id 가 id_3 이라는 데이터가 있으면 update, 없으면 insert

- find()

- 데이터 조회

> db.posts.find()

** SELECT * FROM POSTS WHERE USER = 'andy';

--> db.posts.find({ 'user': 'andy' })  // --> db.posts.find({ 'user': /andy/ })

** SELECT * FROM POSTS WHERE SEQ BETWEEN 1 AND 10;

--> db.posts.find({ 'seq': { $gt:1, $lt:10 })

** SELECT * FROM POSTS WHERE SEQ IN ('1', '2');

--> db.posts.find({ 'seq': { $in: ['1', '2'] }})

** SELECT * FROM POSTS WHERE SEQ = 1 AND USER = 'andy';

--> db.posts.find({ 'seq': '1'}, {'user': 'andy'})

** SELECT * FROM POSTS WHERE SEQ = 1 OR USER = 'andy';

--> db.posts.find({$or: [{'user': 'andy'}, {'user':, 'ronin'}])

- remove()

- 해당 Collection 의 모든 데이터 삭제

db.posts.remove({})

** DELETE FROM POSTS WHERE USER = 'andy';

--> db.posts.remove({'user': 'andy'})

-> posts collection 에서 user 가 andy 라는 데이터들은 모두 삭제

--> db.posts.remove({'user': 'andy'}, true)

-> posts collection 에서 user 가 andy 라는 데이터들 중 가장 첫번째 데이터만 삭제

** insert(), save() 의 차이점

insert() 는 document 에 _id 매개변수가 존재 시 동일 _id 가 있다면 중복 오류 발생

save() 는 document 에 _id 매개변수가 존재 시 동일 _id 가 있다면 기존 데이터 변경, 없다면 새로 등록




** 추후 더 알게 된다면 보강하도록 하겠습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함