2월 19일 자 학습 내용 정리입니다.
✅ Mongoose ODM
ODM은 Object Data Modeling의 약어이다.
따라서 Mongoose ODM은 MongoDB의 Collection에 집중하여 관리하도록 도와주는 패키지이다.
Collection을 모델화하여 관련 기능을 쉽게 사용할 수 있도록 도와준다.
✔️ 연결 관리
MongoDB의 기본 Node.js 드라이버는 연결 상태를 관리하기 어렵다.
반면 Mongoose를 사용하면 간단하게 데이터베이스와의 연결 상태를 관리해준다.
✔️ 스키마 관리
스키마를 정의하지 않고 데이터를 사용할 수 있다는 것은 NoSQL의 장점이지만 데이터 형식을 미리 정의해야 코드 작성과 프로젝트 관리에 유용하다.
따라서 Mongoose는 Code-Level에서 스키마를 정의하고 관리할 수 있게 해준다.
✔️ Populate
MongoDB는 기본적으로 join을 지원하지 않는다.
따라서 join과 유사한 기능을 사용하기 위해서는 aggregate라는 복잡한 쿼리를 사용해야 했다.
하지만 Mongoose의 populate를 사용하면 보다 더 간단한 구현이 가능해진다.
이를 비교해보면 다음과 같다.
// MongoDB aggregate 사용
db.orders.aggregate( [
// Stage 1: Filter pizza order documents by pizza size
{
$match: { size: "medium" }
},
// Stage 2: Group remaining documents by pizza name and calculate total quantity
{
$group: { _id: "$name", totalQuantity: { $sum: "$quantity" } }
}
] )
// Mongoose populate 사용
orders.find({ size: 'medium' }).populate('name')
✅ Mongoose ODM 사용법
Mongoose ODM의 사용 순서는 다음과 같다.
- 스키마 정의
- 모델 만들기
- 데이터베이스 연결
- 모델 사용
✔️ 스키마 정의
Collection에 저장될 Document의 Schema를 Code-Level에서 관리할 수 있도록 작성할 수 있다.
Schema는 다양한 형식을 미리 지정하여 생성, 수정 작업 시 데이터 형식을 체크해 주는 기능을 제공한다.
const { Schema } = require('mongoose');
const PostSchema = new Schema({
title: {
type: String
},
content: String
}, {
timestamp: true
});
module.exports = PostSchema;
Schema를 정의하는 법은 다음과 같다.
- mongoose 패키지에서 Schema 클래스를 가져온다.
- Schema 클래스를 이용해 Schema를 저장할 객체를 하나 만든다.
- 객체의 key와 value를 선언하는데 이때 value는 해당 key에 저장될 값의 데이터 자료형이 들어간다.
- 이때 title처럼 정의할 수도 있지만 type만 정의할 경우 content와 같이 정의할 수도 있다.
- 다양한 옵션도 줄 수 있는데 timestamps 옵션을 사용하면 생성, 수정 시간을 자동으로 기록해 준다.
- Schema 생성이 끝났다면 다른 곳에서 해당 Schema를 사용할 수 있도록 node.js 모듈로 export 한다.
✔️ 모델 만들기
작성된 Schema를 mongoose에서 사용할 수 있는 모델로 만드는 과정이다.
모델의 이름을 지정하여 Populate 등에서 해당 이름으로 모델을 호출할 수 있다.
const mongoose = require('mongoose');
const PostSchema = require('./schemas');
export.Post = mongoose.model('Post', PostSchema);
모델을 만드는 순서는 다음과 같다.
- mongoose 패키지를 로드한다.
- 정의된 Schema를 로드한다.
- 호출된 mongoose 패키지에 .model() 메서드를 사용해 어떠한 이름으로 해당 스키마를 사용할 것인지 정의한다.
- 이때 export를 사용하면 다른 곳에서 해당 모델을 사용할 수 있다.
✔️ 데이터베이스 연결하기
connect 함수를 이용하여 간단하게 데이터베이스에 연결할 수 있다.
mongoose는 자동으로 연결을 관리한다.
따라서 직접 연결 상태를 체크하지 않아도 모델 사용 시 연결 상태를 확인하여 사용이 가능할 때 작업을 실행한다.
const mongoose = require('mongoose');
const { Post } = require('./models');
mongoose.connect('mongodb://localhost:27017/myapp');
- mongoose 패키지와 model을 로드한다.
- 호출된 mongoose 패키지에 .connnect() 메서드를 사용해 MongoDB와 연결한다.
mongoose.connect(uri, options);
✔️ 모델 사용하기
작성된 모델을 사용하여 CRUD 작업을 수행할 수 있다.
Mongoose의 CRUD 관련 함수들은 다음과 같다.
CRUD | 함수명 |
CREATE | create |
READ | find findById findOne |
UPDATE | updateOne updateMany findByIdAnaUpdate findOneAndUpdate |
DELETE | deleteOne deleteMany findByIdAndDelete findOneAndDelete |
이에 대한 자세한 내용은 다음 포스팅에서 확인할 수 있다.
🔍 참조
Aggregate https://docs.mongodb.com/manual/aggregation/
Populate https://mongoosejs.com/docs/populate.html
connect https://mongoosejs.com/docs/connections.html
'엘리스 AI 트랙 4기 > elice AI track' 카테고리의 다른 글
[5주차] Pug와 Async Request Handler, PM2 (0) | 2022.02.19 |
---|---|
[5주차] Mongoose ODM - (2) (0) | 2022.02.19 |
[5주차] NoSQL과 MongoDB (0) | 2022.02.19 |
[5주차] Express.js의 Middleware와 JSON (0) | 2022.02.18 |
[5주차] Express.js (0) | 2022.02.18 |
댓글