How We Coding

### 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