Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Python
- nodejs
- Express
- AWS
- class
- dfs
- GIT
- Queue
- game
- 공룡게임
- Sequelize
- OCR
- cookie
- Nest.js
- TypeScript
- flask
- jest
- JavaScript
- 정렬
- 게임
- 자료구조
- nestjs
- react
- typeORM
- MongoDB
- mongoose
- MySQL
- Dinosaur
- Bull
Archives
- Today
- Total
포시코딩
Mongoose 소개 및 Express에서의 사용법 본문
728x90
https://www.npmjs.com/package/mongoose
설치 방법
npm install mongoose
문서(Document)
MongoDB에서 가지고 있는 각 데이터 하나하나를 문서(Document)라고 정의한다.
1개 이상의 Key-Value의 쌍으로 이루어져 있다.
{
"_id": ObjectId("6682192a1c155bd2f27881"),
"name": "csh",
}
컬렉션(Collection)
JSON 형식의 여러가지 문서(Document)를 보유할 수 있다.
관계형 데이터베이스(RDB)의 Table과 동일한 역할을 한다.
스키마(Schema)
스키마는 컬렉션(Collection)에 들어가는 문서(Document)에 어떤 종류의 값이 들어가는지를 정의한다.
데이터를 모델링할 때 사용한다.
대표적인 스키마 타입
- null: null 값과 존재하지 않는 필드
- ex) null
- String: 문자열
- ex) "mongoDB"
- Number: 숫자
- ex) 3.14
- Date: 날짜
- ex) new Date()
- Buffer: 파일을 담을 수 있는 버퍼, UTF-8이 아닌 문자열을 저장
- ex) 0x65
- Boolean: true or false
- ex) true
- ObjectId(Schema.Types.ObjectId): 객체 ID, 주로 다른 객체를 참조할 때 넣음
- ex) ObjectId()
- Array: 배열 형태의 값
- ex) ["a", "b", "c"]
모델(Model)
데이터베이스에 데이터를 저장해줄 때 데이터의 구조를 담당한다.
스키마를 사용하여 만들고, MongoDB에서 실제 작업을 처리할 수 있는 함수들을 지니고 있다.
문서(Document)를 생성할 때 사용한다.
Express 웹 서버에 DB 연결
Directory Structure 예시
.
├── app.js
├── routes
│ ├── carts.js
│ └── goods.js
└── schemas
├── index.js
├── cart.js
└── goods.js
연결
// (/schemas/index.js)
const mongoose = require("mongoose");
const connect = () => {
mongoose
.connect("mongodb://localhost:27017/db_name")
.catch(err => console.log(err));
};
mongoose.connection.on("error", err => {
console.error("몽고디비 연결 에러", err);
});
module.exports = connect;
// (/app.js)
const connect = require("./schemas");
connect();
strictQuery 에러 해결방법
서버 실행 시 위와 같은 에러가 뜰 경우 db 연결하는 코드 부분에 아래처럼 추가해준다.
const mongoose = require("mongoose");
mongoose.set('strictQuery', true); // 이 부분
const connect = () => {
mongoose
.connect("mongodb://localhost:27017/db_name")
.catch(err => console.log(err));
};
mongoose.connection.on("error", err => {
console.error("몽고디비 연결 에러", err);
});
module.exports = connect;
mongoose Schema
템플릿
const mongoose = require("mongoose");
const defaultSchema = new mongoose.Schema({
defaultId: {
type: Number,
required: true,
unique: true
}
});
module.exports = mongoose.model("Defaults", defaultSchema);
예시
// (/schemas/goods.js)
const mongoose = require("mongoose");
const goodsSchema = new mongoose.Schema({
goodsId: {
type: Number,
required: true,
unique: true
},
name: {
type: String,
required: true,
unique: true
},
thumbnailUrl: {
type: String
},
category: {
type: String
},
price: {
type: Number
}
});
module.exports = mongoose.model("Goods", goodsSchema);
데이터 추가
// (/routes/goods.js)
const Goods = require("../schemas/goods");
router.post("/goods", async (req, res) => {
const { goodsId, name, thumbnailUrl, category, price } = req.body;
// 객체 구조 분해 할당을 통해 데이터를 가져옴
const goods = await Goods.find({ goodsId }); // find()를 통해 goodsId에 해당하는 값 존재하는지 확인
if (goods.length) { // goods.length가 0보다 크면
return res.status(400).json({ success: false, errorMessage: "이미 있는 데이터입니다." });
}
const createdGoods = await Goods.create({ goodsId, name, thumbnailUrl, category, price });
res.json({ goods: createdGoods });
위 코드 작성 후 사진처럼 Thunder Client를 통해 아래 데이터를 보내면 정상적으로 db에 데이터가 들어가는 것을 볼 수 있다.
{
"goodsId": 2,
"name": "시원한 콜라",
"thumbnailUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRk7JqMw7ZYZP4ZW136wcoMTmLzbrMIJzUWb1Dhu9cHwCPp0gA&usqp=CAc",
"category": "drink",
"price": 3000
}
728x90
'MongoDB' 카테고리의 다른 글
[Mongoose] Schema.virtual을 통해 _id(ObjectId)를 다른 이름으로 변경하기 (0) | 2022.12.14 |
---|---|
[Mongoose] Schema 세팅 시 createdAt, updatedAt 자동 설정 (작성 시간, 수정 시간 자동 설정) (0) | 2022.12.14 |
[Mac] Homebrew를 통해 MongoDB 설치하기 (0) | 2022.12.13 |
[Mongoose] exec()의 역할 - 작성중 (0) | 2022.12.12 |
[Mongoose] Schema.virtual을 통해 ObjectId(_id) 다루기 (0) | 2022.12.12 |