MongoDB > 2. MySQL vs MongoDB, CRUD
in Database
본 글은 SW마에스트로 멘토링 이후 별도 학습 후 작성한 글입니다.
1. MySQL vs MongoDB
1.1. MongoDB의 장점
- 스키마 정의가 필요없음 => 비구조화된 데이터를 다루기 용이함
- 데이터베이스 확장이 매우 용이함
- Object 기반의 JSON 객체 활용이 쉬움
- 다양한 쿼리(Aggregate)와 분석을 지원함
1.2. 스키마, 데이터 타입, 데이터 저장, 언어, 구조
MySQL | MongoDB | |
---|---|---|
스키마 | 고정 / 관계형 | 유연 / 비관계형 |
데이터 저장 | Table 형식 | JSON 형식의 문서(Document) |
언어 | Mongo Query | SQL |
구조 | 샤딩 / 복제 | 마스터-슬레이브 / 복제 |
최대 크기 | row별 63.99 KB | document 별 16MB |
1.3. ObjectID
- 12byte 크기의 문자와 숫자로 구성된 값
- ObjectID()의 값을 반환하면 12byte의 hexadecimal(16진수) 값으로 결과를 반환함
1.3.1. ObjectID의 각 자리의 의미
- Unix Timestamp (4 bytes) : Unix 시대에부터 초 단위로 측정된 값
- Random Value (5 bytes) : 랜덤으로 생성된 값
- Count (3 bytes) : 증가하는 count 값, 최초값은 랜덤으로 생성
2. MongoDB - CRUD Method
2.1. 생성(Create) - Insert
- 데이터를 생성할 때 사용하는 명령어
- insertOne() 혹은 insertMany() 메서드 사용 <!– - 생성하기 전 collection을 DB를 지정해 연결(
use [데이터베이스명]
)시키고, collection을 생성(db.createCollection([컬렉션명])
) 해두어야 함 - key값은 쌍따옴표(““)를 입력해주어도 되고 안해주어도 상관없으나, value 값은 문자면 쌍따옴표를 입력해주고, 숫자면 그냥 작성해도 됨 –>
2.1.1. MongoDB Compass에서 실행한 Insert Document
2.1.2. SQL 구문과 비교
2.2. 읽기(Read) - Search
- 새로운 컬렉션 생성 및 데이터 삽입을 위해 사용하는 명령어
- find() 메서드 사용
2.2.1. MongoDB Compass에서 실행한 Find Document
2.2.2. 비교 문법
$and
: and 조건을 통해 다수의 조건이 모두 만족하는 결과 출력- ex)
{ $and: [{code: 2, 23}, {city: 'seoul}] }
- ex)
$or
: or 조건을 통해 다수의 조건 중 하나라도 만족하는 결과 출력$nor
: 다수의 조건이 모두 거짓일 경우 만족하는 결과 출력$not
: 조건의 결과를 반대로 바꿈$eq
: ‘=’과 동일$ne
: not equal$gt
: 값이 다른 값보다 큼(초과)- ex)
{ count: { $gt: 5 } }
- ex)
$gte
: 값이 다른 값보다 크거나 같음(이상)$lt
: 값이 다른 값보다 작음(미만)$lte
: 값이 다른 값보다 작거나 같음(이하)$in
: 배열 내에서 일치하는 값- ex)
{ code: {$ln: [12, 23]} }
- ex)
- 그 외에도
$regex
,$text
,$where
등이 있음
2.2.3. 배열의 인덱스 접근
- 예를 들어
scores.0.score
시 scores 배열의 0번째 원소의 score 값에 접근 가능
2.3. 수정(Update) - Update
- document를 수정할 때 사용하는 명령어
- updateOne() : 맨 처음으로 매칭되는 1개의 document를 수정하는 메서드
- updateMany() : 매칭되는 모든 document를 수정하는 메서드
2.3.1. 필드 관련 문법
$set
: 필드의 값을 설정$currentDate
: 현재 날짜로 설정$inc
: 필드의 값을 증가$rename
: 필드 이름 변경$unset
: document에서 필드 제거
2.3.2. Array 관련 문법
$addToSet
: 배열에 고유 요소 추가$pop
: 배열의 첫 번째 혹은 마지막 요소를 제거(-1, 1)$pull
: 쿼리와 일치하는 배열에서 모든 요소를 제거$push
: 배열에 요소를 추가
2.4. 삭제(Drop) - Delete
- document를 삭제할 때 사용하는 명령어
deleteOne()
: 맨 처음으로 매칭되는 1개의 document 삭제deleteMany()
: 맨 처음으로 매칭되는 1개의 document 삭제