MongoDB

skj1211·2022년 5월 13일
0

22.05.13

MongoDB

대표적인 NoSQL, DocumentDB
Mongo 는 엄청 큰 DB라는 의미로 대용량 데이터를 처리하기 좋음

RDB와 NoSQL

RDB : Relational DataBase

관계형 데이터베이스
자료들의 관계를 중요하게 다룬다.
SQL 질의어를 사용하기위해 데이터를 구조화 함

NoSQL : Non SQL, Not Only SQL

구조화된 질의어를 사용하지 않는 데이터 베이스
자료간의 관계에 초점을 두지않음
데이터를 구조화 하지않고, 유연하게저장함

NoSQL 사용이유

SQL을 사용하기위해서는 데이터 구조화가 필수(DDL)
->스키마에 정의된 데이터가 아니면 저장할 수 없다.

NoSQL을 사용하면 사전 작업 없이 데이터베이스를 사용할 수 있다.
->데이터 베이스 작업에 크게 관여하지 않으면서 프로젝트를 빠르게 진행할 수 있다.

MongoDB 기본 개념

MongoDB - Database
하나이상의 collection을 가질 수 있는 저장소

MongoDB - Collection
하나이상의 Document 가 저장되는 공간
sql에서 table과 유사하지만 collection이 document의 구조를 정의하지는 않는다.

MongoDB - Document
MongoDB에 저장되는 자료
sql에서 row와 유사하지만 구조제약 없이 유연하게 저장 가능

MongoDB - Document - ObjectID
각 document의 유ㅜ일한 키 값, sql의 primary key와 유사
하나씩 증가하는 값이 아닌 ducument 를 생성할 때 자동으로 생성되는 값

MongoDB 사용법

MongoDB를 직접 설치하거나 cloud서비스를 사용할 수 있다.
직접 설치시 어렵지만 원하는 만큼 데이터를 사용할 수 있다.
cloud를 사용하면 쉽고 빠르지만 사용량에 따라 요금이 부과된다.

직접 설치
직접 모든 데이터베이스 관련 설정을 해야한다.
무료로 사용할 수있는 Community Version을 제공한다.

cloud 사용
모든 데이터베이스관련 기능을 웹에서 관리가능
특별한 노하우 없이 데이터베이스 운용가능
사용량에 따라 비용 발생하지만, 512mb까지는 무료로 사용 가능

Mongoose ODM

Mongoose ODM : Object Data Modeling
MongoDB의 collection에 집중하여 관리하도록 하는 패키지
MongoDB을 모델화 하여 관련 기능들을 쉽게 사용하게 해줌

Mongoose ODM 사용 이유

연결관리 : Mongoose를 사용하면 간단하게 데이터베이스와의 연결상태를 관리
스키마 관리 : 스키마를 정의하지 않고 데이터를 사용, 데이터 형식을 미리 정의 해야 코드 작성과 프로젝트 관리에 유용하다. Mongoose는 code-level에서 스키마를 정의하고 관리하게 해줌
Populate : mongodb는 기본적으로 join을 제공안한다. .populate를 사용하여 간단하게 구현

Mongoose ODM 사용법

스키마정의
Collection에 저장될 Document의 스키마를 Code-Level에서 관리할 수 있도록 Schema를 작성할수있음
다양한 형식을 미리 지정하여, 생성, 수정작업시 데이터형식을 체크해주는 기능을 제공
timestamps 옵션을 사용하면 생성, 수정시간을 자동으로 기록해줌

모델만들기
작성된 스키마를 mongoose에서 사용할 수 있는 모델로 만들어야함
모델의 이름을 지정하여 Populate 등에서 해당 이름으로 모델을 호출할 수 있음

데이터베이스 연결
connect함수를 이용해 간단하게 데이터베이스에 연결할 수 있음
mongoose는 자동으로 연결을 관리해주고 직접 연결상태를 체크하지 않아도 모델사용시 연결상태를 확인하여 사용이 가능할 때 작업을 실행

모델 사용
작성된 모델을 이용하여 CRUD를 수행

Query

MongoDB에도 sql의 where와 유사한 조건절 사용가능
MongoDB의 query는 BSON형식으로 기본 문법 그대로 사용가능
{key: value}로 exact match
lt,lte,gt,gte를사용하여rangequery작성가능lt, lte, gt, gte 를 사용하여 range query 작성 가능in : 다중 값 검색가능
$or : 다중 조건 검색 가능

populate

document안에 ducument를 담지않고 objectID를 가지고 reference하여 사용할 수 있는 방법을 제공
document에는 reference 되는 objectID를 담고 사용할 때 populate하여 하위 document처럼 사용할 수 있게 해줌

0개의 댓글