빅데이터 부트캠프/MongoDB

빅데이터 부트캠프 46일차 (MongoDB)

Mecodata 2022. 9. 7. 11:04

MongoDB

- C++ 기반 문서지향적(Document-Oriented) 오픈 소스 데이터베이스 

- 대표적인 문서형 모델 NoSQL 데이터베이스

- 행(row) 개념 대신 문서(document) 개념을, 테이블(table) 개념 대신 콜렉션(Collection) 개념을 사용

- 데이터를 구조화하여 json(키-값) 형태로 저장

- 데이터 계층 구조 = db > collection > document > field(key:value)

※ RDBMS 데이터 계층 구조 = db > table > tuple > column

- sudo systemctl start mongod = MongoDB 전원 ON

- sudo systemctl status mongod = MongDB 상태 확인

- sudo service mongod stop = MongoDB 전원 OFF

 

MongoDB 설치

- MongoDB 설치에 필요한 키를 공식사이트에서 받아옴
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -

- MongoDB 설치 경로 지정
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

- MongoDB 설치
sudo apt-get install -y mongodb-org

- MongoDB 주요 패키지들이 업데이트가 안되도록 설정
echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-org-shell hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections

 

- sudo systemctl start mongod = MongoDB 전원 ON

- sudo systemctl status mongod = MongDB 상태 확인

- sudo service mongod stop = MongoDB 전원 OFF

- mongo = MongoDB 실행

 

※ lock관련 MongoDB 설치 오류 발생시

- sudo rm /var/lib/apt/lists/lock (apt lock 관련 파일 삭제)
- sudo rm /var/lib/dpkg/lock*  (dpkg lock 관련 파일 삭제)

- sudo dpkg --configure -a (환경설정 파일 재설정)

- sudo apt update (재설정한 것을 반영하기 위해 업데이트)

 

MongoDB 기본 명령어

- show dbs = DB 목록 출력

- use DB명 = 해당 DB 사용

- db =  현재 접속해있는 DB 확인

- db.dropDatabase() = 현재 접속해있는 DB 삭제

- show collections = 접속해있는 DB의 콜렉션 목록 출력

 

[db.콜렉션명.] 형태의 명령어

- insertMany() = 지정한 콜렉션에 입력한 여러 개문서 추가 (존재하지 않는 콜렉션이면 자동 생성 후 추가)

- insertOne() = 지정한 콜렉션에 해당 문서 추가 (하나만 추가 가능)

 

- findOne() = 해당 콜렉션의 문서들 중 맨 앞 순서 출력

(조건 입력 시 조건을 만족하는 문서들 중 맨 앞 순서만 출력)

- find() = 해당 콜렉션의 모든 문서들 조회

- find({필드 조건으로 원하는 문서 지정}, {조회하고 싶은 키값 지정}) = 조건에 해당하는 문서들의 지정한 키값만 조회

(조건이 없다면 빈칸으로 {}생략은 X) (첫번째 {}{}하나 더 추가하여 세부조건 설정 가능)

(_id는 지정하지 않아도 항상 변환하지만 두번째 {}에서 _id:0으로 입력 시 _id가 조회되지 않음,

findMany는 존재 X

- find().pretty() = db.콜렉션명.find() 결과 보기 편하게 한줄씩 출력

 

논리연산자를 이용한 조건 설정

- $and = 조건 모두 만족

- $or = 조건 하나라도 만족

- $not 

- $in, $nin(not in) = 포함되는지 안되는지

- $not과 $in 혼용 가능

 

수리연산자를 이용한 조건 설정

- $lt(<), $lte(<=), $gt(>), $gte(>=)

- $eq(=), $ne (Not Equal)

- $mod (나눗셈)

ex) $mod [5,0] = 5로 나누었을 때 나머지가 0인 값들

- $mod와 $in 혼용 가능

 

- drop() = 해당 콜렉션 삭제

- deleteOne(필드) = 해당 필드를 가지고 있는 문서들 중 맨 앞 순서 삭제

- deleteMany(필드) = 해당 필드를 가지고 있는 문서들 모두 삭제

 

- replaceOne(수정할 문서를 찾기 위한 조건, 바꿔줄 필드 내용) = 조건을 만족하는 한 개의 문서필드 내용 변경

(조건을 만족하는 것이 여러개일 경우 맨 앞 순서의 문서에 적용)

replaceOne맨 마지막 {upsert:true} 입력시 해당 조건을 만족하는 문서가 없으면 insert로 실행되어 문서가 추가

- replace(수정할 문서를 찾기 위한 조건, 바꿔줄 필드 내용) = 조건을 만족하는 여러 개의 문서 필드 내용 변경

 

- updateOne(수정할 문서를 찾기 위한 조건, $set 필드) = 조건을 만족하는 한 개 문서에 입력한 필드 추가

- updateMany(수정할 문서를 찾기 위한 조건, $set 필드) = 조건을 만족하는 여러 개 문서에 입력한 필드 추가

 

- explain() = 쿼리가 실행될 때 발생하는 정보 출력

 

MongoDB 제한자 종류 (필드와 연관)

- $inc = 조건과 일치하는 키의 값을 증가시킴 (-를 붙여 양수가 아닌 음수 입력 시 키값 감소)

 

- $set = 필드 추가 (만약 추가하려는 필드가 이미 있는 필드라면 실행시 변화 X)

- $unset = 조건을 만족하는 문서의 지정한 필드 삭제

 

- $push = 중복과 상관없이 해당 키값(배열) 원소 추가 (한 개의 값만 추가 가능)

- $each = $push, $addToSet와 같이 사용하며 한 개의 값만이 아닌 여러 개의 값추가할 수 있도록 해줌

$addToSet = $push와 같은 기능이나 중복되는 데이터는 추가되지 않음

 

- $sort = 지정한 필드 기준 오름차순(1) 혹은 내림차순(-1) 정렬

 

- $slice = 키값(배열)에 추가할 수 있는 원소의 개수 제한

- $pop = 키값(배열)맨 앞(-1) 혹은 맨 뒤(1)원소 삭제

- $pull = 주어진 조건을 만족하는 키값(배열) 원소 삭제

- $all = 조건으로 입력하는 배열의 원소두 개 이상일 때 사용  

- $size = 조건으로 입력하는 배열 원소 개수 설정

ex) $size:3 = 원소의 개수가 3개인 배열을 포함한 문서 반환

- $slice = 조건으로 입력하는 배열 슬라이싱 

ex) $slice:2 = 처음으로부터 2개의 원소만 반환, $slice:-2 = 마지막으로부터 2개의 원소만 반환 (역순)

      $slice:[2,3] = 첫번째 배열에서는 두 개, 두번째 배열에서는 3개의 원소 반환

- $elemMatch = 조건을 만족하는 키값(배열) 출력 (키값비배열인것은 제외)