MongoDB

안정태·2021년 5월 26일
0

Study

목록 보기
30/33

MongoDB는 대표적인 NoSQL 도큐먼트 데이터베이스다.

도큐먼트 데이터베이스
데이터를 테이블이 아닌 문서처럼 저장하는 데이터베이스

이러한 비관계형 데이터베이스는 다음과 같은 경우에 많이 사용한다.

  • 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장할 경우
  • 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
  • 빠르게 서비스를 구축하고 데이터 구조를 자주 업데이트 하는 경우

Document

객체 처럼 필드-값 쌍으로 저장하고 구성하는 방법

{
  <filed> : <value>,
  <filed> : <value>,
  "name" : "Jetty"
  "title" : "Chapter"
  "age" : 25
}
  • 필드 : 데이터포인트를 위한 고유한 식별자
  • 값 : 주어진 식별자와 관계된 데이터
  • 컬렉션 : 데이터 베이스 > 컬렉션 > 도큐먼트

JSON vs BSON

JSON은 우리가 흔히 아는 방식으로 작성하는 것을 말한다. 이러한 JSON은 다음과 같은 특징을 가진다.

  • 읽기 쉽고 많은 개발자들이 쓰기 편한 형태이다.
  • 하지만 파싱이 매우 느리고, 메모리 사용에 있어서 비효율적이다.
  • 기본 데이터 타입만을 지원하기 때문에 사용 할 수 있는 타입에 제한이 있다.

이러한 문제점을 해결하기 위해 등장한 것이 바로 BSON 형식이다.

BSON

  • 컴퓨터의 언어에 가까운 이진법에 기반을 둔 표현법
  • JSON보다 효율적이고 빠르고 가볍다.
  • 더 많은 데이터 타입을 사용할 수 있다.

JSON : mongoimport(가져오기) / mongoexport(내보내기)
BSON : mongorestore(가져오기) / mongodump(내보내기)

Mongo CRUD

CREATE

mongoDB는 모든 도큐먼트가 _id필드를 기본으로 가지고 있다. 이는 각 도큐먼트를 구별하는 역할을 한다.

  • _id가 다르고 내용이 같다 해도 두 도큐먼트는 서로 다르다.
  • 내용이 다륵 _id가 같더라도 같은 도큐먼트로 여겨 에러가 발생한다.

기본형
db.<컬렉션 이름>.insert(<도큐먼트>)

다음과 같은 형식으로 Create를 실시할 수 있다. 이후 writeResult라는 객체를 통해 결과를 반환한다.

  • nInserted : 삽입된 도큐먼트의 수
  • writeError : 삽입되지 않은 이유를 반환한다.
    _id 값이 중복되어있다면 삽입되지 않는다.
    _id 값을 주지 않고 실행하면 자동으로 _id값을 배정한다.

여러개의 도큐먼트 한번에 추가하기
db.<컬렉션 이름>.insert([<도큐먼트>, <도큐먼트>, <도큐먼트>, ...])

다음과 같이 도큐먼트를 배열의 형태로 넣을 수 있다.
단, 이는 순서대로 들어가기 때문에 만약 앞에서 에러가 발생한다면 나머지는 들어가지 못하게된다.

이를 방지하기 위해서 insert의 두번째 인자로 ordered를 추가해주면 된다.
db.<컬렉션 이름>.insert([<도큐먼트>, <도큐먼트>, ...], {order: false})

READ

DB
show dbs, use db, show collections

조회문
db.<collection_name>.find(<쿼리문>)
db.<collection_name>.find() : 모든 데이터를 조회
db.<collection_name>.find().pretty() : 진짜 그냥 더 이쁘게 보이게 해준다.
db.<collection_name>.find().count() : 데이터의 수를 조회

UPDATE

  • updateOne : 주어진 기준에 맞는 다수의 도큐먼트 중 첫번째 도큐먼트 하나만 업데이트
  • updateMany : 쿼리문과 일치하는 모든 도큐먼트를 업데이트

db.<컬렉션 이름>.[updateMany || updateOne](<쿼리문>,<update문>)

update문

  • {"$inc":{"pop":10}} : 값을 10 증가시킨다.
  • {"$set":{"pop":6235}} : pop의 값을 6235로 만든다.
  • {"$push":{"scores":{"type":"extra credit", "score": 10}}} : scores의 배열에 다음 객체를 삽입한다.

DELETE

  • deleteOne : 주어진 기준에 맞는 다수의 도큐먼트 중 첫번째 도큐먼트 하나만 삭제
  • deleteMany : 쿼리문과 일치하는 모든 도큐먼트를 삭제

db.<컬렉션 이름>.[deleteOne || deleteMany](<쿼리문>)

컬렉션 삭제
db.<collection_name>.drop()

profile
코딩하는 펭귄

0개의 댓글