데이터 엔지니어
[MongoDB] 개념 및 명령어 본문
개념
- MongoDB: C++로 작성된 오픈소스 문서지향(Document-Oriented)적 Cross-platform 데이터베이스
- 뛰어난 확장성과 성능, 현존하는 NoSQL 데이터베이스 중 인지도 1위를 유지
NoSQL & Schemaless
- NoSQL = Not Only SQL 쿼리를 안쓴다는 것이 아닙니다.
- 기존 RDBMS(관계형 데이터 베이스 매니지먼트)가 갖고 있는 특성뿐만 아니라, 다른 특성들을 부가적으로 지원한다는 것을 의미합니다.
- 그중에서도 MongoDB는 Key Value DB를 사용하고 있습니다.
- Schemaless: Schema를 따로 정의할 필요가 없다.
- 같은 컬렉션안에서 데이터 타입, 필드가 서로 달라도 저장됩니다.
- Schema: 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 메소드를 사용하여 조회하고 삭제하는 것을 추천합니다.
출처
'프로그래밍(Programming) > 데이터베이스(Database)' 카테고리의 다른 글
WSL2 Postgresql 설치 & 세팅 (1) | 2021.02.23 |
---|
Comments