Front-End/mongoDB

[mongoDB] 몽고DB

민바이민 2021. 5. 22. 11:19

NoSQL

Not only SQL의 약자입니다. 기존의 RDBMS(관계형 데이터베이스)의 한계를 극복하기 위해 만들어진 새로운 형태의 데이터베이스입니다. 관계형 DB가 아니므로 RDBMS처럼 고정된 스키마(테이블의 틀) 및 JOIN문이 존재하지 않습니다.

 

NoSQL을 사용하는 이유

가장 큰 이유는 성능 때문입니다. 관계형 데이터베이스는 시스템의 신뢰도를 높이는데 필요한 장치를 많이 가지고 있습니다. SQL문을 읽고 실행하는데 많은 리소스를 사용하며 성능이 떨어지는 경우가 많습니다. 반대로 NoSQL은 성능을 최우선으로 생각하여 실시간으로 처리해야 할 경우나 대용량 트래픽을 감당할 수 있는 메시징 시스템 등에 활용됩니다.

회원정보등의 DB는 SQL쪽이 좋고 글을 적고 지우고를 많이하는 SNS같은 곳에서는 NoSQL이 좋다.

 

mongoDB 특징

- NoSQL이기 때문에 관계형 데이터베이스의 테이블 개념이 없습니다.
- 데이터가 모인 하나의 단위를 컬렉션이라고 부릅니다.
- 데이터를 정해 놓은 컬럼의 형태로 컬렉션에 넣어야 한다는 제약이 없습니다.
- mongoDB의 데이터베이스는 컬렉션의 집합이라고 할 수 있습니다.
- 컬렉션은 여러개의 문서 객체를 가질 수 있습니다. 문서 객체는 속성들의 집합으로써 한 사람의 이름과 나이등을 저장하고 있는 하나의 문서 객체를 만든 후 그 안에 자바스크립트 객체와 같이 속성들을 추가하여 저장할 수 있습니다.
- 자바스크립트처럼 객체형으로 들어가있는데 그것을 다큐먼트(document)라고 부른다.

 

데이터

{"id":1, "userid":"apple", "userpw":"1111" ..} -> document


document 모이면 -> collection(관계형DB table과 비슷하다고 생각하면 된다) 모이면 -> database

 

document

  • RDBMS의 record(row)와 비슷한 개념입니다.
  • 데이터 구조는 한 개 이상의 key-value-pair로 이루어져 있습니다.
  • Document는 동적(dynamic)의 schema 를 갖고있습니다. 같은 Collection 안에 있는 Document 끼리 다른 schema 를 갖고 있을 수 있는데요, 쉽게 말하면 서로 다른 데이터 (즉 다른 key) 들을 가지고 있을 수 있습니다.
하나의 collection 안에
{"id":1, "userid":"apple", "userpw":"1111"}
{"name":"김사과", "age":40}
{"id":1, "userid":"apple", "userpw":"1111", gender:"남자"}
{"id":1, "userid":"apple", "userpw":"1111", "username":"김사과"}
이렇게 key값이 다른 여러 개의 document가 들어갈 수 있습니다.

 

collection

  • mongoDB의 document그룹입니다.
  • collection 내부에 document들이 위치하고 있습니다.
  • RDBMS의 table과 비슷한 개념이지만 RDBMS와 달리 스키마를 따로 가지지 않습니다.

 

mongoDB 환경설정

 

윈도우

파일탐색기 -> 내 PC -> 마우스 오른쪽 버튼(속성) -> 고급 시스템 설정 -> 환경 변수 -> 시스템 변수 -> path -> 편집 -> 새로 만들기 -> C:\Program Files\MongoDB\Server\4.4\bin
(mongoDB 실행파일 위치)

 

아래 글 참조해주세요.

meanbymin.tistory.com/77?category=952552

 

[mongoDB] 맥북 빅서(big sur)에서 mongoDB 설치, 설정하기.

맥은 무슨 프로그램 하나 깔아서 실행할 때 마다 이렇게 고생을 하냐!!!! 제목에 빅서(big sur)라고 적은 이유는 Mac OS가 계속 계속 업데이트가 되어가면서 권한 설정이 변화가 되면서 맥 카탈리나(C

meanbymin.tistory.com

 

확인

cmd 혹은 terminal 에서 mongo 기입 후 엔터

 

MongoDB 문법

 

데이터베이스 확인

show dbs;

 

데이터베이스 생성 및 선택

use 데이터베이스명;
use frontenddb;
데이터베이스가 없으면 생성하고 있으면 사용하게 된다.

** 데이터베이스를 오타를 치면 데이터베이스를 새로 만들어서 들어가기 때문에 오타 조심!
** 데이터베이스의 자료가 없을 경우 show dbs에서 나타나지 않습니다.

컬렉션 생성

db.createCollection('컬렉션명');
db.createCollection('testCollection');

 

컬렉션 확인

show collections;

 

컬렉션 삭제

db.컬렉션명.drop();
db.testCollection.drop();

 

연습용 컬렉션 만들기

db.createCollection("member")

 

document 추가

db.컬렉션명.insert(객체);
db.member.insert({'userid':'apple','userpw':'1111'});
db.member.insert({'userid':'banana','userpw':'2222','username':'반하나'});
db.member.insert({"userid":"orange","userpw":"3333","gender":"남자"});
db.member.insert({"userid":"melon","userpw":"4444","gender":"남자", "username":"이메론"});
db.member.insert({"userid":"cherry","userpw":"5555","username":"채리", "gender":"여자","point":2000});
db.member.insert({"userid":"avocado","userpw":"6666","username":"안카도", "gender":"남자","point":1500});
db.member.insert({"userid":"berry","userpw":"7777","username":"배애리", "gender":"여자","point":1800});
db.member.insert({"userid":"coconut","userpw":"8888","username":"고코넛", "gender":"남자","point":1700});


document 확인

db.컬렉션명.find();
db.컬렉션명.find().pretty();
db.컬렉션명.find(객체).pretty();
db.member.find();
db.member.find().pretty();
db.member.find({"userid":"apple"}).pretty();

* _id는 각 document의 유일한 키로 쓰이는 값입니다. RDBMS에서 auto_increment와 비슷하다

 

document 비교연산

$eq : 주어진 값과 일치하는 값을 찾습니다.
$gt : 주어진 값보다 큰 값을 찾습니다.
$gte : 주어진 값보다 크거나 같은 값을 찾습니다.
$lt : 주어진 값보다 작은 값을 찾습니다.
$lte : 주어진 값보다 작거나 같은 값을 찾습니다.
$ne : 주어진 값과 일치하지 않는 값을 찾습니다.
$in : 주어진 배열 안에 속하는 값을 찾습니다.
$nin : 주어진 배열 안에 속하지 않는 값을 찾습니다.

 

문제

포인트가 1700점 이상인 멤버를 검색합니다.

db.member.find({point:{$gte:1700}}).pretty();

 

document 논리연산

$or : 주어진 조건 중 하나라도 true일 때 true인 결과를 찾습니다.
$and : 주어진 모든 조건이 true일 때 true인 결과를 찾습니다.
$not : 주어진 조건이 false일 때 true, true일 때 false인 결과를 찾습니다.

 

문제

아이디가 "melon"이고 이름이 "이메론"인 멤버를 검색합니다
db.member.find({$and:[{"userid":"melon"},{"username":"이메론"}]}).pretty();    // find안에는 객체가 무조건 들어가야하고 2개 이상은 배열로 감싼다.

 

실습

1. 이름이 "안카도"인 멤버를 검색합니다.

db.member.find({"username":"안카도"}).pretty();

2. 포인트가 1800보다 작거나 같은 멤버를 검색합니다.

db.member.find({"point":{$lte:1800}}).pretty();

3. 아이디가 "apple" 이거나 "banana"인 멤버를 검색합니다.

db.member.find({$or:[{"userid":"apple"},{"userid":"banana"}]}).pretty();

4. 성별이 "여자"이고 포인트가 1700이상인 멤버를 검색합니다.

db.member.find({$and:[{"gender":"여자"},{"point":{$gte:1700}}]}).pretty();