짹뚜 스튜디오

[Database] MongoDB 본문

개발 공부/Database

[Database] MongoDB

짹뚜 2022. 2. 15. 20:11

MongoDB

MongoDB는 NoSQL 기반 데이터베이스 중 가장 널리 쓰이는 비관계형 데이터베이스 관리시스템이다. MongDB는 데이터를 Document 형식으로 저장한다. 그리고 Document는 JSON과 유사한 형태이기 때문에 좀 더 이해하기 쉽고 스키마의 제약 없이 자유롭게 데이터를 저장할 수 있다.

용어

  • Document: 데이터를 field-value 한 쌍으로 저장하고 구성한다.
  • Field/Key: 데이터 포인트를 위한 고유한 식별자이다.
  • Value: 주어진 식별자와 연결된 데이터이다.
  • Collection: MongoDB에서 Document로 구성된 저장소이다. (관계형 데이터베이스에서 테이블의 역할이다.)

Document

JSON

MongoDB에서 document는 JSON의 형식으로 출력되기 때문에 document를 작성할 때에도 JSON 형식으로 작성하는데 다음과 같은 조건을 만족해야 한다.

 

  • 중괄호로 Document가 시작하고 끝나야 한다.
  • Field와 Value는 콜론(:)으로 분리된다.
  • Field도 문자열이기 때문에 ""로 감싸야한다.

Document가 JSON의 형식으로 되어있기 때문에 개발자들이 읽고 사용하기 편리하다. 그러나 JSON 형태의 데이터를 저장할 때도 단점이 있다. 

 

  • JSON은 텍스트 형식이기 때문에 읽기는 쉽지만, 파싱이 느리고 메모리 사용이 비효율적이다.
  • JSON은 기본 데이터 타입만 지원하기 때문에 다양한 데이터 타입을 사용할 수 없다.

이러한 문제점을 해결하기 위해서 BSON 형식이 도입이 되었다.

BSON

BSON은 Binary JSON이라는 뜻으로 컴퓨터가 빠르게 읽을 수 있는 Binary 형태로 JSON을 변경한 것이다. JSON 보다 메모리 사용이 효율적이며 빠르게 읽으며 더 많은 데이터 타입을 사용할 수도 있다.

 

MongoDB에서는 내부적으로 BSON을 사용한다. 사용자에게 보일 때에는 JSON의 형태로 보여주고 저장할 때나 전송을 할 때에는 BSON의 형태로 만들어서 저장 또는 전송한다. 즉, MongoDB를 사용할 때에는 BSON에 대해서 신경을 쓰지 않아도 알아서 관리를 하고 있다.

MongoDB 구문

Create

db.<collection_name>.insert(<document>)
예시) db.users.insert( { "name": "jjak" } )

 

여러 개의 Document를 한 번에 삽입하려면 <document>를 배열의 형태로 넘겨준다.

Read

db.<collection_name>.find(<filter>)
예시) db.users.find( { "name:": "jjak" } )

 

위 예시에서는 name이 jjak이라는 데이터가 있는 document들을 찾아준다. 만약 모든 document를 출력하고 싶다면 filter 없이 find()만 사용하면 된다.

 

find().pretty()를 하게 되면 찾은 결과를 읽기 편한 형태로 출력해준다.

find().count()를 하게 되면 찾은 결과의 총개수를 출력한다.

findOne() 메서드는 조건에 맞는 첫 번째 Document를 출력한다.

Update

db.<collection_name>.updateOne(<filter>, <update>)
예시) db.users.updateOne( { "name": "jjak" }, { "$set" : { "age": 30 } } )

 

updateOne()은 주어진 조건에 맞는 첫 번째 Document만 업데이트한다.

updateMany()는 주어진 조건에 맞는 모든 Document를 업데이트한다. 

 

<update>에 사용되는 연산자는 다음과 같다.

 

  • $set: 주어진 값으로 변경한다.
  • $inc: 해당 값들을 증가시킨다. ( {"$inc": { "age": 1 } }을 하게 되면 age의 값들을 1씩 증가한다.)
  • $push: 배열로 이루어진 field의 값에 마지막 값으로 추가한다.

Delete

db.<collection_name>.deleteOne(<filter>)
예시) db.users.deleteOne( { "name": "jjak" } )

 

deleteOne()은 조건에 맞는 첫 번째 Document를 삭제한다.

deleteMany()는 조건에 맞는 모든 Document를 삭제한다.

 

Collection을 삭제하고 싶을 때는 drop을 사용한다.

db.<collection_name>.drop()
예시) db.users.drop()

'개발 공부 > Database' 카테고리의 다른 글

[Database] SQL vs NoSQL  (0) 2022.02.15
[Database] NoSQL  (0) 2022.02.15
[Database] SQL  (0) 2022.02.12
[Database] 관계형 데이터베이스 (Relational Database)  (0) 2022.02.10
[Database] Transaction  (0) 2022.02.09
Comments