MongoDB
- NoSQL의 대표주자 mongodb
- MySQL의 JOIN === mongodb의 aggregate
- 빅데이터 메시징 세션 관리 등(비정형 데이터)에는 mongodb 사용하면 좋음
- MySQL: 3306 mongodb: 27017
- 기본 세팅
- 설치 경로 : C:\Program Files\MongoDB\Server\4.4\bin
- mongodb(Compass) 설치 후 c드라이브 data ㅡ> db 폴더 생성
- mongod 실행
- mongo 실행
- admin 생성
use admin
db.createUser ({ user: "root", pwd: "password", roles: ["root"]}
- CMD 모두 종료
mongod --auth // 관리자 로그인
mongo admin -u root -p password
- 데이터베이스
use nodejs // 데이터베이스 생성
show dbs // 데이터베이스 조회(다큐먼트 하나라도 있어야 보임)
db // 현재 데이터베이스 확인
- 컬렉션(테이블) 생성
db.createCollection("users") // 따로 생성할 필요는 없음
show collections // 현재 컬렉션(테이블) 확인
- Create(생성)
- create 쿼리
db.users.save({
name: "axis",
age: 29,
married: false,
comment: "자기소개",
createdAt: new Date(),
});
- Read(조회)
- find 쿼리
db.users.find({)};
db.users.find({}, { _id: 0, name: 1, age: 1, comment: 0,}) // 두 번째 인수로 조건(0/1)
- Sort(정렬)
db.users({}, { _id: 0, age: 1, }).sort({ age: 01 });
- limit
db.users.find({}, { _id: 0, name: 1, age: 1}).sort({ age: -1 }).limit(1);
- Update(업데이트)
- update 쿼리
- 첫 번째 인수로 수정 대상 두 번째 인수로 수정 내용을 작성
db.users.update({ nmae: "axis"} { $set: { name: "admin"}});
- Delete(삭제)
- remove 쿼리
- 첫 번째 인수로 삭제할 대상 조건 제공
- 성공 시 삭제된 개수가 반환됨
db.users.remove({ name: "admin" });
SQL(MySQL) | NoSQL(몽고디비) |
규칙에 맞는 데이터 입력 | 자유로운 데이터 입력 |
테이블 간 JOIN 지원 | 컬렉션 간 JOIN 미지원 |
안정성 일관성 | 확장성 가용성 |
용어(테이블 로우 칼럼) | 용어(컬렉션 다큐먼트 필드) |
Mongoose ODM
concept: mongodb 작업을 쉽게 할 수 있도록 도와주는 라이브러리
- ODM: Object Document Mapiing: 객체와 다큐먼트를 매핑(1대1 짝지음)
- mongodb에 없어 불편한 기능들을 몽구스가 보완
- 테이블과 유사한 기능 JOIN 기능 추가
- query builder : 쿼리를 쉽게 만들 수 있게 해주는 기능
- sequelize models === mongoose schemas
- 기본 세팅
npm i mongoose // mongoose 패키지 설치
- schemas 폴더 index.js
const mongoose = require("mongoose");
const connect = () => {
if (process.env.NODE_ENV || "production") { // 배포용이 아니면(개발용)
mongoose.set("debug", true); // 로그 쿼리 체크 가능
}
mongoose.connect("mongodb://root:password@localhost:27017/admin", {
dbName: "nodejs",
useNewUrlParser: true,
useCreateIndex: true,
}, (error) => {
if (error) {
console.log("몽고디비 연결 실패");
} else {
console.log("몽고디비 연결 성공");
}
})
};
mongoose.connection.on("error", (error) => { // 이벤트리스너
console.error("몽고디비 연결 에러");
})
mongoose.connection.on("disconnected", () => {
console.error("몽고디비 연결 끊김 연결 재시도");
})
module.exports = connect;
스키마(Schemas)
concept: MySQL의 테이블처럼 정해진 데이터만 들어갈 수 있게 강제함
- schemas 폴더 안에 작성
- type은 자료형 require는 필수 여부 default는 기본값 unique는 고유 여부
- Mongoose Schemas 작성 시 타입은 bson이 아니라 json이 되어야함
'데이터베이스' 카테고리의 다른 글
Sequelize N:M associate (0) | 2022.05.05 |
---|---|
Sequelize 1:N associate (0) | 2022.05.05 |
Sequelize 1:1 associate (0) | 2022.05.05 |
Sequelize Model (0) | 2022.05.04 |
Sequelize ORM (0) | 2022.05.03 |