빅데이터 부트캠프 46일차 (MongoDB)
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 = 조건을 만족하는 키값(배열) 출력 (키값이 비배열인것은 제외)