Mongo DB 사용법

» database

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.."})