Mongo DB 사용법
Mongo DB 사용법
1. mongoDB 의 장단점
mongoDB 의 가장 큰 장점은 크게 3가지가 있다.
- 자유로운 스키마와 편리한 확장
- 다양한 종류의 Index
- 검색이 엄청 빠르다
mongoDB 의 단점
- 관계형 DB(RDBMS) 를 사용 하던 방식과 너무 달라서 modeling 이 어렵다
- 등록 수정은 다소 느리다
mongoDB 에서 데이터를 내장 시킬것인지 참조 할 것인지,
작업을 하다보면 필요성에 따라 많은 고민을 하게 된다.
내장 시킬 경우 read 속도가 빠르고 데이터 일관성 유지는 되지만,
중복이 발생 할 수 있고 데이터 수정 시 모든 Document 를 수정 해야 되서 write 속도가 느리다.
반대로 데이터를 참조 형식으로(RDBMS) 하면 중복이 없고 단일 건 만 수정 하면 되서 write 속도는 빠르나,
mongoDB 에서 말하는 JOIN 인 lookup 을 사용해 여러 collection 을 읽어야 되서 read 속도가 많이 느리다.
※ 요점은 자주 수정이 되지 않는 데이터는 내장 시켜서 lookup 을 사용하지 않고 collection 만 조회 해 read 속도를 높인다.
2-1. mongo DB 다운로드
2-2. mongo DB GUI compass 다운로드
위 링크에서 다운로드 후 환경변수를 잡아준다.
3. 설정
Ⅰ. mongoDB compass 를 실행
Ⅱ. mongoDB 의 기본 커넥션 정보는 (mongodb://localhost:27017/) 이다.
없을 경우 (+) 버튼을 클릭 해 추가 하면 된다.
4. 시작하기
Ⅰ. database 및 collection 을 생성
필자의 경우
Database Name 은 chatdb 이고,
Collection Name 은 message 이다
NoSql 에서 Collection 은 Sql 의 Table 이라고 보면 된다.
Ⅱ. Collection 까지 만들었으니, 데이터 등록,조회,수정,삭제 까지 한번 다 해보자.
먼저 GUI 로 쉽게 해보자.
collection 을 선택 후 [ADD DATA] 버튼을 클릭 Document 를 Insert 한다.
수정, 삭제도 간단하다.
해당 data 에 마우스를 가져다 대면 우측에 버튼들이 보인다.
연필모양은 수정, 휴지통 모양은 삭제이다.
Ⅲ. shell 로 작업해보자.
우측에 [Open MongoDB shell] 버튼을 클릭
shell 이 열리면서 자동으로 조회하는 명령어가 만들어진다.
실행 시 데이터가 잘 조회된다.
5. 명령어
데이터 베이스
-
use 데이터베이스명
: 데이터베이스를 생성, 이미 있을 시 해당 데이터 베이스 실행- ex) use chatdb
-
show dbs
: 현재 생성 되어 있는 데이터베이스 목록 출력- ex) show dbs
- -> chatdb, flexTest...
-
db
: 현재 실행중인 데이터베이스를 출력- ex) db
- -> chatdb
-
db.stats()
: 현재 실행중인 데이터베이스 상세조회 -
db.dropDatabase()
: 현재 실행중인 데이터베이스 삭제
컬렉션
-
db.createCollection("컬렉션명")
: collection 을 생성- ex) db.createCollection("message")
-
show collections
: collection 을 조회- ex) show collections
- -> message
-
db.컬렉션명.drop()
: 해당 컬렉션명의 collection 을 삭제
테이터
-
db.컬렉션명.insert({"key" : "값", "key2" : "값"})
: 컬렉션에 데이터를 생성- ex) db.message.insert({"roomId" : "412a..", "userId" : "1", "content" : "hi~", "readYn":"N"})
- ex) db.message.insert({"roomId" : "523q..", "userId" : "2", "content" : "hello~", "readYn":"N"})
-
db.컬렉션명.find()
: 컬렉션의 값을 조회한다. 결과로는 Cursor를 반환하는데, 커서는 쿼리 요청의 결과 값을 가르키는 포인터이다. 커서 객체를 통해 보이는 데이터의 수를 제한하거나 정렬할 수도 있다.- ex) db.message.find() : 컬렉션의 모든 데이터가 출력
- ex) db.message.find({"roomId" : "412a.."}, {}) : "roomId" 값이 "412a.." 인 데이터들을 출력
-
db.컬렉션명.remove({"key":"value"})
: 해당 키와 값이 있는 Document를 삭제- ex) db.message.remove({"roomId":"412a.."})