[MongoDB] (RDB vs NoSQL) 및 간단 명령어
### MongoDB 특징 ###
- 관계형 데이터베이스(RDB)는 데이터를 Column과 Row로 표현한다. 각 칼럼은 데이터의 타입을 표현하고, 각 Row는 하나의 레코드(Record)를 의미한다.
- 반면, MongoDB는 문서형 데이터베이스의 대표적인 케이스로 RDB와는 다른 구조적 특징을 갖는다.
1) Row는 있지만, Column은 없다.
- 정확히는 Row 속에 RDB 에서의 칼럼 역할이 포함되어 있다고 볼 수 있다.
- 문서형 데이터베이스에서 하나의 Row는 데이터 타입과 각 데이터 타입에 부합하는 데이터를 모두 소유한다.
- 이전 RDB에서는 모든 Row가 동일한 칼럼에 종속족이었던 것과는 달리, 문서형 데이터베이스는 각 Row가 서로 다른 칼럼의 종류, 갯수를 소유하는 것이 가능하다.
2) 장점
- 엄격한 구조적 지배에서 벗어나서 확장성이 매우 높다고 볼 수 있다.
- 기존의 RDB는 칼럼이 다른 구조화된 자료구조를 가지는 것이 불가능 했으며, 이를 외래키로 해결하고자 하였다.
하지만, 문서형 데이터베이스는 어떠한 데이터타입이라도 수용 가능한 JSON이라는 형태의 구조를 가진다.
3)
관계형 데이터베이스에서의 테이블 => 컬렉션(Collection)
레코드 => 문서객체(Document)
### MongoDB 간단 명령어 ###
> cls # 화면 클리어
> show dbs # DB 목록 확인
admin 0.000GB
config 0.000GB
local 0.000GB
> use store # DB 선택 (없는 DB면 새로 생성 후 선택)
switched to db store
> db # 현재 선택된 DB 확인
store
> db.createCollection('books'); # Collection 생성
{ "ok" : 1 }
> show collections # Collection 리스트 확인
books
> db.books.insert({title:'Book-0', content:'Zero', author:'Hoon'}) # Document 삽입, 컬렉션은 없으면 자동으로 생성
WriteResult({ "nInserted" : 1 })
> db.books.find().pretty() # 도큐먼트 확인.
{
"_id" : ObjectId("5bc562bc5d27acea4455d20a"),
"title" : "Book-0",
"content" : "Zero",
"author" : "Hoon"
}
> db.books.insert([ # 여러개의 도큐먼트 삽입
... {title:'Book_Two', content:'ONE-TWO', autor:'JJo'},
... {title:'Book_Three', content:'TWO-three', quthor:'Yong'},
... {title:'Book_Four', content:'Three-Four', autor:'Hooni', Age:27}
... ])
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
> db.books.find().pretty()
{
"_id" : ObjectId("5bc562bc5d27acea4455d20a"),
"title" : "Book-0",
"content" : "Zero",
"author" : "Hoon"
}
{
"_id" : ObjectId("5bc563945d27acea4455d20b"),
"title" : "Book_Two",
"content" : "ONE-TWO",
"autor" : "JJo"
}
{
"_id" : ObjectId("5bc563945d27acea4455d20c"),
"title" : "Book_Three",
"content" : "TWO-three",
"quthor" : "Yong"
}
{
"_id" : ObjectId("5bc563945d27acea4455d20d"),
"title" : "Book_Four",
"content" : "Three-Four",
"autor" : "Hooni",
"Age" : 27
}
> db.books.remove({quthor:'Yong'}) # 도큐먼트 제거
WriteResult({ "nRemoved" : 1 }) # 제거 성공에 따른 메세지
> db.books.find().pretty()
{
"_id" : ObjectId("5bc562bc5d27acea4455d20a"),
"title" : "Book-0",
"content" : "Zero",
"author" : "Hoon"
}
{
"_id" : ObjectId("5bc563945d27acea4455d20b"),
"title" : "Book_Two",
"content" : "ONE-TWO",
"autor" : "JJo"
}
{
"_id" : ObjectId("5bc563945d27acea4455d20d"),
"title" : "Book_Four",
"content" : "Three-Four",
"autor" : "Hooni",
"Age" : 27
}
> db.books.remove({author:'Yong'})
WriteResult({ "nRemoved" : 0 }) # 제거 실패시의 메세지
> db.books.update({author:'Hoon'}, {age:25, gender:'male'}) # 업데이트 (replace 개념인듯 하다)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.books.find().pretty()
{
"_id" : ObjectId("5bc562bc5d27acea4455d20a"),
"age" : 25,
"gender" : "male"
}
{
"_id" : ObjectId("5bc563945d27acea4455d20b"),
"title" : "Book_Two",
"content" : "ONE-TWO",
"autor" : "JJo"
}
{
"_id" : ObjectId("5bc563945d27acea4455d20d"),
"title" : "Book_Four",
"content" : "Three-Four",
"autor" : "Hooni",
"Age" : 27
}
>
- 더 많은 내용 참고하기 : https://velopert.com/545
'DB' 카테고리의 다른 글
sequelize issue (0) | 2019.03.28 |
---|---|
[Error / solved] ERROR: Can't create database 'node_sns' (errno: 158458432) (0) | 2019.01.17 |
brew 를 통한 mongoDB 설치 및 설정, 서비스 (0) | 2019.01.15 |
[Workbench] Authentication plugin 'caching_sha2_password' cannot be loaded (0) | 2018.12.02 |
[MySQL] join 해부 (Left, Right, Outer, Inner Join) (0) | 2018.11.24 |