본문 바로가기

MongoDB

MongoDB 설치 및 사용

@markdown

# MongoDB

<br/>

## MongoDB 소개

_____

- 10gen 사에서 개발한 솔루션

- 스키마를 고정하지 않는 형태로, 스키마 변경으로 발생되는 문제가 없음

- 데이터를 구조화하여 JSON 형태로 저장(key-value 저장)

- Join 연산이 불가능하기 때문에 join이 필요없는 데이터 설계가 필요하다.

- NoSQL 기반의 DB


## MongoDB 특징

____

- 자동으로 기본키 생성

- Json 형태로 key-value의 형태로 SQL이 구성된다.


## NoSQL

_____

- 대용량의 데이터를 빠르게 처리하기 위해 나온 SQL 개념

- 정보가 자주 바뀌는 설계에서는 비효율적이다.

- 일관성 모델을 이용하는 데이터의 저장 및 검색을 하기 위한 매커니즘 제공

- 빅데이터와 실시간 웹 애플리케이션에 적합


## MongoDB 설치

### 1. MongoDB 설치

- [> MongoDB 다운로드](https://www.mongodb.com/download-center?jmp=nav#community)

- 다운로드 된 `MongoDB` `Complete` 설정으로 설치 

### 2. 시스템 환경변수 설정

- 환경변수 뒤에 `C:\Program Files\MongoDB\Server\3.4\bin;` MongoDB 설치된 `bin` 경로 추가

- mongo 입력 후 버전 확인


### 3. MongoDB 경로 설정

- cmd - mongod 명령어 입력

![](https://user-images.githubusercontent.com/12658717/28253007-e10d4662-6ad8-11e7-8cc9-44f5ba68fdf8.png)

- MongoDB는 default 경로로 저장 폴더가 필요하기 때문에 C드라이브 밑에 폴더를 생성한다.

- mongod -dbpath C:\Lecture\mongodb\DB 경로를 설정

![](https://user-images.githubusercontent.com/12658717/28252998-c42a349c-6ad8-11e7-9bc9-26e8134a0a4b.png)

- 설정이 완료고나면, 새로운 cmd 창을 열어 mongo 입력하면 위에서 생성한 mongoDB 서버에 접속하게 된다.

![](https://user-images.githubusercontent.com/12658717/28252992-b2af4d9c-6ad8-11e7-9da5-8821b31355c9.png)


### 4. MongoDB GUI Tool 설치

____

- Robomongo : mongo shell을 지원하는 GUI Tool

- 다운로드 : [[https://robomongo.org/download](https://robomongo.org/download)]

![](https://user-images.githubusercontent.com/12658717/28253159-0d28ac8a-6adb-11e7-9010-2f18c39d0159.png)

- 설치 후 Connection Create -> localhost MongoDB 연결

![](https://user-images.githubusercontent.com/12658717/28253169-33aa20be-6adb-11e7-9672-c9dbefc7e2c2.png)

- 연결 성공 화면


## MongoDB 사용

____

### MongoDB 기본 명령어

- `show collections` : DB에 만들어진 collection들을 보여주는 명령어

- `db.createCollection("users")` : users collection 생성

- `db.users.stats()` : `users` Collection의 상태를 보여주는 명령어

- `db.users.find()` : `users` Collection 내의 모든 데이터를 보여주는 명령어(SQL : select * from users와 같다)

- `db.users.insert({ user_id : 'lee', addr : 'seoul'})` : `users` collection에 데이터 삽입하는 명령어(SQL : insert into users(id, addr) values('lee', 'seoul')와 같다)


### MongoDB 조건문

- db.users.find({ 조건 }, { 필드 })

- `db.users.find({addr : 'seoul'})` : 주소가 `seoul`인 데이터만 조회하는 조건문(SQL : select * from users where addr = 'seoul')

- `db.users.find({addr : 'seoul'}, {user_id : 0})` : 주소가 `seoul`인 데이터만 조회하는데, user_id 필드는 출력안되게 하는 명령어


#### 연산자 조건

- `db.users.find({$or : [{age : 27}, {addr : 'new york'}]})` : 조건문에 `or` 연산자 사용 명령어

- `db.users.find({$and : [{age : 27}, {addr : 'new york'}]})` : `and` 연산자

- `db.users.find({ age  : {$gte : 20 }, age : { $lt : 30 } })` : 범위 조건 검색 (select * from users where age >= 20 and age < 30)


#### Null 조건

- `db.users.find({ 'addr' : null})`

- `db.users.find({ 'addr' : {$exists : false} })`


### MongoDB 정렬 


- `db.users.find.sort({ user_id : 1})` : 오름차순 1, 내림차순 -1

- `db.users.find().limit(10)` : 상위 10번까지 출력(select * from users where rownum >= 10)

- `db.food.insert({ 'fruit' : ['apple', 'banana', 'orange'})` : 배열 데이터 입력 

- `db.food.find({ 'fruit' : { $size : 3 }})` : 배열의 크기가 3인것만 검색


### MongoDB - document 수정 / 추가

- `db.users.update({ age : { 조건 }}, { 수정 사항 })`

- `db.users.update({ age : {$gt : 70}}, {$set : { addr : 'jeju'}})`

- `db.users.update({ age : {$gt : 70}}, {$set : { addr : 'jeju'}}, { multi : true })`  : 여러 개의 document들을 수정할 때 사용하는 명령어


- `db.users.update( {age : {$gte : 60 }}, {$set : { hobby : 'mountain' }}, {multi : true })`

- `age`가 60이상인 `documentation`에 대해서 hobby 속성을 새로 추가해 수정한다. 있다면 `mountain`으로 바꾼다.

- 반대로 삭제하고 싶을땐 `$unset`을 사용한다.


- `age`가 60이상인 `documentation`에 대해 `hobby : swimming`을 `$push`를 사용해 추가한다.

- 단, 이때 hobby 속성이 배열 형태여야 데이터가 push 된다. 

- `db.users.update{ { age : {$gte : 60 }}, {$push :  { hobby : 'swimming' }}, {$multi : true} }`

- 다수 데이터를 배열 형 hobby에 넣을 때

- `db.users.update{ { age : {$gte : 60 }}, {$push :  { hobby : {$each : ["music", "dancing"} }}, {$multi : true} }`


- `document`의 여러 데이터 중 특정 요소를 모르는 데이터를 지울때

- `db.users.update( { user_id : 'lee01'}, {$pull : { hobby : 'music'}})`


### MongoDB - document 삭제

- `db.users.remove()` : 모든 document만 지워진다.

- `db.users.remove( { age : 22 })` : age가 22인 document만 지울 때

- `db.users.drop()` : collection 삭제 명령어

'MongoDB' 카테고리의 다른 글

MongoDB Sharding(샤딩)  (0) 2017.07.21
MongoDB 복제 시스템, 레플리카 셋  (0) 2017.07.20