본문 바로가기

개발 공부

[Mongo DB] Mongo DB 개념

Mongo DB

1. Mongo DB...?

  • 몽고하면… 한 때, 아시아를 호령했던 징키스칸의… 몽고… ㅈ..ㅅ.. 아무튼 몽골과 전혀 상관없이 'Mongo DB'는 NoSQL DB 중에서 매우 중요한 위치에 있는 DB이다. 크로스 플랫폼이 지원되어 여러 플랫폼 다양화 시대에 딱 좋은, 즉 유연성을 갖춘 DB라고 이해하고 있다.

NoSQL SQL이 NO라고 오해할 수도 있지만 Not Only의 약자'SQL(RDB 언어) 말고 우리도 있다.'로 이해하면 좋을 것 같다.

2. RDBMS vs Mongo DB

  • 개념적으로 큰 차이가 있는 것은 아니고, 디테일한 개념 차이로 인해 워딩이 다른 정도이다.
구분 RDBMS Mongo DB
테이블(table) 컬렉션(collection)
튜플/로우 도큐먼트(document)
컬럼 필드
컬럼 embedded Documents
기본키 (Primary key) 기본키 (Primary key) - Mongo DB는 자체적으로, _id라는 디폴트 키를 제공한다.

Primary Key (기본키) a.k.a PK

이름만 보면 와일드카드(*)처럼 다 따고 들어갈 수 있는 마스터키 같은데… 알고 보면 전혀 그렇지 않다. 테이블(or 콜렉션)에서 로우(레코드) 고유 식별 번호라고 이해하면 된다. PK는 개체 무결성의 원칙을 적용하여 사용한다. 따라서 각 row는 고유의 인덱스를 갖게 되고, 이는 데이터에 빠른 접근을 가능케 도와준다.

Mongo DB의 Document data structure

  • JSON와 매우 흡사한 데이터 구조를 지닌 몽고디비의 도큐먼트
  • 몽고디비 만든 회사는 Binary + JSON 해서 BSON이라고 하는데…뭐 ㅇㅇ 기본 구조는 아래와 같다.
  • 아래 도큐먼트 DS가 조금 복잡한 구조를 살펴보자. 객체, 배열 등 복합적인 데이터 타입들을 document에 저장할 수 있다. 이런 부분이 RDB에 비해 굉장히 편한 부분이다.
var mydoc = {
               // _id는 pk이다.
               _id: ObjectId("5099803df3f4948bd2f98391"),
               name: { first: "Alan", last: "Turing" },
               birth: new Date('Jun 23, 1912'),
               death: new Date('Jun 07, 1954'),
               contribs: [ "Turing machine", "Turing test", "Turingery" ],
               views : NumberLong(1250000)
            }

3. Mongo DB's Query

Mongo DB Query문을 공부하기에 앞서 Database들은 documents collections의 집합이라는 개념을 잊지 말자.

// 1. 데이터베이스가 생성될 물리적 경로생성
c:\>mkdir c:\MONGODB\test 

// 2. mongoDB 버전 확인
>mongod --version

// 3. mongoDB 인스턴스 활성화
>mongod --dbpath c:\mongodb\test
-- mogodb shell프로그램 실행
>mongo

// 4.test 데이터베이스로 이동할때
>use test

// 5. 데이터베이스 목록 출력
>show dbs

// 6. 데이터베이스 상태확인 
>db.stats()

// 7. 데이터베이스 shutdown
admin 영억으로 이동후에 셧다운 해야함.
>use admin  
>db.shutdownServer()

// 8. 데이터베이스 로그아웃
>db.logout()

// 9.collection 생성
capped:true이면 해당 익스텐트를 모두 사용하게되면
처음부터 재 사용할 수 있는 데이터 구조를 생성할 때
size 해당 Collection의 최초 생성크기
>db.createCollection("emp",{capped:false, size:8192});

// 10. colection list보기
show collections

// 11. collection의 현재상태 및 정보분석
>db.emp.validate();

// 12.collection의 이름변경
>db.emp.renameCollection("employee")

// 13.Collection의 삭제
>db.employee.drop();

// 14.collection에 데이터 INSERT
>db.emp.insert({eno:1101,fname:"JIMMY"});

// 15.collection에 데이터 UPDATE
>db.emp.update({eno:1101},{$set:{fname:"JOO"}});

// 16.collection에 데이터 SELECT
>db.emp.find().sort({eno:-1});

// 17.도큐먼트(row)부터 정의하고 collection 생성
>m={ename :  "smith"}
>n={ename :  1101}
>db.things.save(m)
>db.things.save(n)
>db.things.find()
>db.things.insert({ empno : 1102, ename:"king"})

// 18.for문을 이용한 증감된 값을 Collection에 insert
>for(var n=1103; n<=1120; n++) db.things.save({n:n, m:"test"+n})

// 19.db.things.find()로 조회시 리스트가 20 row가 넘는 경우 다음 페이지를 보고싶을때
>it