데이터베이스 NoSQL 기본 (mongoDB) - mongoDB 바로 다뤄보기

3. mongoDB 바로 다뤄보기

  • mongodb의 데이터 구성
    • db, collection으로 구성
    • 데이터는 각 collection에 document 형식(python dictionary)으로 저장 됨
    • collection들의 논리적인 집합이 database

3.1. Robomongo 설치 (MongoDB 관리 GUI 툴) (실습)

  • https://robomongo.org/download
    • 맥에서 처음 실행시 잘 안되면, 삭제 후, 다시 다운로드받아서 재설치하세요
  • 실행
    • Click Create
      • In Connection
        • Name: AWS EC2 IP
        • Address: AWS EC2 IP (port는 27017 디폴트)
      • In Authentication
        • Database 이름: admin
        • User Name: 사용자 ID
        • Password: 사용자 암호
      • Click Test & Save button to check connection
    • Connection
      • Click Coonect buttion
    • Check connection
      • Right-click (server name) -> Show Log
    • Create DB
      • Right-click (Server) -> Create Database -> Add dave_db
    • Create Collection
      • Right-click (Collections(0) in created DB) -> Create Collection -> Add test
    • Insert Document
      • Right-click (test collection) -> Insert Document -> Add the following JSON(BSON) Document -> Click Validate & Save buttons
      • Click View Documents in test collection
      • Check id in indexes of test collection (인덱스 자동 생성)
{
    "name"  : "Dave Lee",
    "age"   : 22,
    "major" : "CS"
}
{
    "name"  : "David Oh",
    "age"   : 24,
    "major" : "Japanense"
}

  • Insert Document (different JSON fields) & Click View Documents in test collection
{
    "name"     : "이종수",
    "age"      : 54,
    "minor"    : "CS",
    "nickname" : "wink"
}

3.2. Robomongo에서 커멘드 입력해보기 (실습)

  • Right-click (Server) -> Open Shell
  • show dbs - 전체 데이터베이스 열람
  • use [DB 이름] - 데이터베이스 선택 (없으면 데이터베이스 생성)
    • 예) use dave_db - dave_db 데이터베이스 선택
  • show collections - 선택된 데이터베이스의 콜렉션 열람
  • db.[Collection 이름].함수() 로 해당 컬렉션의 데이터 열람 및 조작
    • 예) db.test.find() - test 컬렉션에서 전체 Document 검색
  • 데이터베이스 생성
    • use dave_db
  • 데이터베이스 현황 확인
    • db
    • db.stats()
  • 데이터베이스 삭제 및 생성
    • db.dropDatabase() (현재 컬렉션 삭제)
    • use dave_db
  • collection 생성 및 삭제
    • db.createCollection("employees", {capped:true, size:10000})
      • Right-click (server) -> Click Refresh -> Go to dave_db -> Go to Collections -> Check employees
      • capped:true 최초 제한된 크기로 생성된 공간에서만 데이터를 저장하는 설정 (고성능, 저장공간차면 기존 공간 재사용, 일정시간만 저장하는 로그에 적합)
    • db.employees.isCapped()
    • db.employees.drop()
    • db.createCollection("employees")
    • db.employees.isCapped()
    • db.employees.drop()
    • db.createCollection("employees", {capped:true, size:10000})
  • collection 확인
    • show collections
    • db.employees.stats()
  • collection 이름 변경
    • db.employees.renameCollection("emp")
  • collection 삭제
    • db.emp.drop()

3.3. SQL과 간단 비교 - mongodb collection 생성/변경

  • collection 생성 (원하는 타임으로 데이터를 바로 넣으면 됨)
    • PRIMARY KEY를 위한 별도 컬럼 만들 필요 없음.
    • mongodb는 collection에서 _id가 각 Document마다 자동생성되어 primary key 역햘을 함
    • 컬럼마다 데이터 타입을 정할 필요 없음 ("컬럼명": 컬럼값 이 기본 형태임)

  • collection 구조 변경 (기존 Document에 컬럼 추가/삭제 필요없을 시는 새로운 Document에만 필요한 컬럼을 추가 또는 삭제해서 넣으면됨)
    • ALTER TABLE은 기본적으로 collection에서는 필요 없음
    • 일부 기존 Document에도 컬럼과 컬럼값을 넣거나 삭제해야 한다면 다음과 같은 형태로는 가능함
  • 기존 Document에도 컬럼과 컬럼값 추가시
    • SQL: ALTER TABLE people ADD COLUMN join_date DATETIME
    • mongodb: db.people.updateMany({ }, { $set: { join_date: new Date() } })
  • 기존 Document에도 컬럼과 컬럼값 삭제시
    • SQL: ALTER TABLE people DROP COLUMN join_date
    • mongodb: db.people.updateMany({ }, { $unset: { "join_date": "" } })