
: SQL을 사용하지 않는 데이터베이스
SQL과 NoSQL 차이
설치과정 유의점
Complete 선택 | Service로 설치하는 선택은 해제 |
|---|
설치 경로 : C:\Program Files\MongoDB\Server\8.2\bin
터미널에서 다음과 같은 명령어 실행(PowerShell에서 사용)
./mongod --ipv6
몽고디비 셸 공식 사이트에서 셸을 설치한다.
설치 후 몽고디비 셸 위치(C:\Users\user\Downloads\mongosh-2.5.9-win32-x64.zip\mongosh-2.5.9-win32-x64\bin)에 들어가 mongosh.exe를 누르면 압축이 해제된다.
압축 해제 후 해제된 폴더의 mongosh.exe를 찾아 실행(이때 MongoDB 켜져있는 터미널, mongo shell 총 두 개가 켜져있어야 함)
몽고디비 셸에서 관리자 계정 추가

mongod --ipv6 --auth
mongosh admin -u root -p [password]
몽고디비 실행 후 compass로 접속하여 Connection 생성
Connection Options 설정으로 | Authentication에서 Username, Password, Database 이름 설정 |
|---|
connect 후에 아래와 같이 admin, config, local이 생성

몽고 쉘에서 use admin 명령어로 접속한 후 아래와 같은 명령어를 입력한다.
use nodejs
=> show dbs;를 했을때 안보인다(데이터 1개정돈 넣어줘야 조회 가능)
(컬렉션 = 테이블)
몽고 쉘을 통해 users와 comments 컬렉션을 생성해준다.
db.createCollection('users')
db.createCollection('comments')
show collections를 입력하면 컬렉션 목록을 확인할 수 있다.
db.컬렉션명.insertOne(...)
여러 개 생성 시에는 insertMany를 사용한다.

MongoDB에는 save가 없음
if save 발견 -> 옛날버전 / 몽구스의 save

db.users.find({});

첫 번째 인수 객체에 기입
=> 시퀄라이즈의 Op와 비슷
- $gt : 초과
- $gte : 이상
- $lt : 미만
- $lte : 이하
- $ne : 같지 않음
- $or : 또는
- $in : 배열 요소 중 하나

sort 메서드 사용
- 내림차순 : -1
- 오름차순 : 1

조회할 데이터 개수를 제한
=> limit()

건너뛸 데이터 개수 설정(offset과 같음)
=> skip()

db.updateOne({ 수정할 데이터 }, { $set: { 수정할 내용 } });
1개 수정 - updateOne
여러 개 수정 - updateMany

하나만 삭제 - DeleteOne
여러 개 삭제 - DeleteMany
몽구스 OBM
package.json
터미널에 아래와 같은 명령어로 패키지 설치
$ npm i express morage nunjucks mongoose
$ npm i -D nodemon
schemas = models
몽고디비 연결은 시퀄라이즈와 유사함
schemas/index.js
process.env.NODE_ENV !== 'production'
=> 개발 환경일 때만 debug true로 설정
=> 배포 환경에서는 쿼리 내용 보이지 않도록
몽구스와 몽고디비 연결 => 주소 사용
nodejsbook은 비밀번호 -> 실제 사용시 실제 비밀번호 사용
admin은 로그인을 위한 db -> 주소에 작성
nodejs는 실제 데이터 저장할 db -> 인수에 작성
useNewUrlParser, useCreateIndex : 둘 다 true, 아니면 에러 발생
에러 이벤트 리스너 -> 에러 발생시 기록 및 재연결 시도
modules.exports = connect는 app.js에 연결
connect 실행되면서 몽고디비 연결
user, comment 테이블 생성 -> 스키마 사용
ref를 쓰지 않고 nested Object를 사용하여 ObjectId에 User를 통채로 넣을 수도 있음
예시 :
하지만 이 경우에는 user의 정보가 바뀌면 모든 comment의 정보를 수정해야 하는 단점이 있음

req.params.id에 ObjectId 문자열 들어감
populate 사용법
1. POST : object id였던 것을 populate하면 실제 zero의 객체로 바꿔줌
(routes/comments.js)
2. GET : commenter로 먼저 찾은 다음 populate
(routes/user.js)
: update 사용
: delete 사용
find같은 경우에는 데이터가 쌓일수록 응답 속도가 느려진다.
=> index 사용으로 보완