@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 |