데이터 엔지니어

[MongoDB] 개념 및 명령어 본문

프로그래밍(Programming)/데이터베이스(Database)

[MongoDB] 개념 및 명령어

kingsmo 2020. 9. 13. 17:32

 

개념

  • MongoDB: C++로 작성된 오픈소스 문서지향(Document-Oriented)적 Cross-platform 데이터베이스
  • 뛰어난 확장성과 성능, 현존하는 NoSQL 데이터베이스 중 인지도 1위를 유지

NoSQL & Schemaless

  • NoSQL = Not Only SQL 쿼리를 안쓴다는 것이 아닙니다.
    • 기존 RDBMS(관계형 데이터 베이스 매니지먼트)가 갖고 있는 특성뿐만 아니라, 다른 특성들을 부가적으로 지원한다는 것을 의미합니다.
    • 그중에서도 MongoDB는 Key Value DB를 사용하고 있습니다.
  • Schemaless: Schema를 따로 정의할 필요가 없다.
    • 같은 컬렉션안에서 데이터 타입, 필드가 서로 달라도 저장됩니다.
    • Schema: RDBMS에서 주로 쓰이는 개체, 속성, 관계를 미리 정의 (비정형 데이터를 다루기 힘듬)

MongoDB 구성요소

RDBMS와 MongoDB비교

Collections

  • MongoDB Document의 그룹
  • RDBMS의 Table과 비슷한 개념
  • 따로 schema를 가지고 있지 않음

Document

  • 문서라기 보다는 RDBMS의 record와 비슷한 개념
  • _id 자동적으로 부여함 -> unique한 document를 가지기 위함.
    • 12bytes의 hexadecimal
    • 4bytes: timestamp / 3bytes: machine id / 2bytes: MongoDB 서버의 프로세스id / 3bytes: 순차번호

예시

{
    "_id": ObjectId("631203df3f4948bd2f98312"),
    "nickname": "smothly",
    "name": { first: "Seung Ho", last: "Choi" }
}
  • key:value쌍으로 이루어짐, key=”nickname” value=”smothly”
  • 동적 Schema를 가짐 = Document끼리 다른 구조를 가질 수 있음

Fields

  • RDBMS의 속성과 비슷한 개념
  • 위에서 key에 해당하는 값들로 주로 조회할 때 많이 사용합니다.

RDMS와의 비교

  • table <-> collection
  • tuple/row <-> document
  • column <-> key/field
  • table join <-> embedded document
  • primary key <-> primary key(_id)

MongoDB 명령어 & 실습

설치

OS에 맞게 공식사이트에서 community edition 설치해주세요!
공식문서 보기 힘드시면 velopert 블로그 구글링을 통해 설치해주시기 바랍니다.

터미널에 mongo입력하셔서 접근 되시면 성공하신겁니다.

 

Database

  • 생성
use [DATABASE_NAME] use tutorial
  • 조회
db

현재 사용중인 db(tutorial)가 나오는 것을 확인

show dbs

다른 db들도 조회 가능합니다.

 

  • 삭제
db.dropDatabase();

현재 사용중인(use) database 삭제


Collection

  • 생성
db.createCollection(name, [options])
db.createCollection('users')

각 명령어의 옵션들은 몽고디비 매뉴얼 에서 확인하고 사용하시길 바랍니다.

db.adminUsers.insert({"name": "seungho"})

이렇게 Document를 생성해도 자동으로 Collection이 생성이 됩니다.
여기서 확인할 수 있는거는 본인이 원하는 형식으로 insert할 수 있습니다. (= schemaless)

  • 조회
show collections
  • 삭제
db.COLLECTION_NAME.drop()
db.adminUsers.drop()

Document

일단 위에서 use명령어로 본인이 사용할 db를 먼저 선택해 줍니다.

생성

db.COLLECTION_NAME.insert(document)
db.users.insert({"name": "seungho", "nickname": "smothly"})
  • 여러개 넣기 (배열을 사용하여 넣으면 됩니다.)
db.users.insert([ {"name": "seungho", "nickname": "smothly"}, {"name": "철수", "nickname": "영희친구"} ])
  • 조회
db.COLLECTION_NAME.find()
db.users.find()

find 함수는 조건을 사용하여 조회할 수도 있으므로 다음 포스트에 다뤄보겠습니다.
지금은 전체를 조회하는 구문입니다.

 

  • 삭제
db.COLLECTION_NAME.remove(criteria, justOne)
db.users.remove({"name": "철수"})

criteria 조건 부분에 name이 ‘철수’인 documnet만 삭제하라고 조건을 주었습니다.
평소에 사용하실 때는 미리 find 메소드를 사용하여 조회하고 삭제하는 것을 추천합니다.

 

 

출처
Comments