2021. 2. 15. 14:09ㆍMongo DB
서버 세팅하기
서버는 nodeJS, express를 활용한 서버에 mongoose를 활용해서 MongoDB Atlas에 등록한 클러스터를 활용할 예정입니다. 그렇기 때문에 테스트 환경에 npm을 통해서 해당 모듈들을 설치하고 step. 1을 통해서 클러스터를 만들어주세요! 그리고 connect 옵션에서 어플리케이션으로 연결하는 옵션을 선택한 이후 연결문을 복사해서 다음과 같이 mongoose를 통해서 연결해주세요.
// server.js 파일//
const mongoose = require('mongoose');
mongoose.connect('여기에 복사한 string을 넣고 password와 db name은 본인 것으로 바꿔주세요', {
useNewUrlParser: true
});
이번 예시로는 음식의 칼로리 데이터를 CRUD할 수 있는 서버를 만드는 것이 목표이기 때문에 food라는 모델과 foodroutes라는 라우터를 설정해주도록 하겠습니다. 우선 서버는 다음과 같이 기본 뼈대를 만들어주세요.
// server.js 파일//
const express = require('express');
const mongoose = require('mongoose');
const foodRouter = require('./FoodRoutes'); //같은 폴더에 라우터 코드를 넣을 파일을 만들었습니다.
const app = express();
app.use(express.json());
mongoose.connect('mongodb+srv://<username>:<password>@testcluster.gc1z8.mongodb.net/<db>?retryWrites=true&w=majority', {
useNewUrlParser: true
});
app.use(foodRouter);
app.listen(3000, () => { console.log('3000번 포트에서 작동 중!') });
스키마 작성
mongoose.Schema 라는 메소드르 통해서 데이터베이스에 컬렉션을 만들 수 있습니다. 스키마를 작성할 때 참고하면 좋은 옵션들은 다음과 같습니다.
- type String, Number, Date, Boolean, Array, Map (object) 등의 타입을 정할 수 있습니다.
- required (Boolean) 이 옵션에 해당하는 value값이 없으면 오류가 생기도록 설정합니다.
- trim (Boolean) 추가 공백을 삭제합니다.
- uppercase (Boolean) 대문자.
- lowercase (Boolean) 소문자.
- validate 따라오는 함수에 통과하는지 체크를 해줍니다.
- default 디폴트 값을 설정합니다.
// Food.js 파일//
const mongoose = require('mongoose');
const FoodSchema = new mongoose.Schema({
name: {
type: String,
required: true,
trim: true,
lowercase: true
},
calories: {
type: Number,
default: 0,
validate(value) {
if (value < 0) throw new Error("Negative calories aren't real.");
}
},
});
const Food = mongoose.model("Food", FoodSchema);
module.exports = Food;
라우터 작성
CRUD를 위한 컨트롤러들의 역할을 하는 코드를 FoodRoutes.js에 작성하도록 합시다. MySQL의 Sequelize 쿼리문과 비슷한 mongoose의 쿼리 명령어는 다음과 같습니다.
- find() 특정 값을 가지는 데이터를 컬렉션에서 찾을 때 사용합니다. ex) .find({name: kimchi}) 하면 이름이 김치인 모든 데이터를 찾음
- save() 주어진 값으로 데이터를 생성합니다.
- findByIdAndDelete() ID값을 가지고 검색하여 삭제합니다.
- findByIdAndUpdate ID값을 가지고 검색하여 해당 데이터를 업데이트 해줍니다.
- deleteOne() and deleteMany() 데이터를 지우고 싶을 때 사용하는 명령어입니다.
1. 데이터 값 조회
// FoodRoutes.js 파일 //
const express = require('express');
const foodModel = require('./Food');
const app = express();
app.get('/foods', async (req, res) => {
const foods = await foodModel.find({});
try {
res.send(foods);
} catch (err) {
res.status(500).send(err);
}
});
2. 데이터 생성
app.post('/food', async (req, res) => {
const food = new foodModel(req.body);
try {
await food.save();
res.send(food);
} catch (err) {
res.status(500).send(err);
}
});
3. 데이터 수정
app.patch('/food/:id', async (req, res) => {
try {
await foodModel.findByIdAndUpdate(req.params.id, req.body)
await foodModel.save()
res.send(food)
} catch (err) {
res.status(500).send(err)
}
});
4. 데이터 삭제
app.delete('/food/:id', async (req, res) => {
try {
const food = await foodModel.findByIdAndDelete(req.params.id)
if (!food) res.status(404).send("No item found")
res.status(200).send()
} catch (err) {
res.status(500).send(err)
}
});
2021.3.9 추가
- mongoDB 쿼리에 대한 좋은 자료
05. MongoDB(몽고디비) Study - 데이터 읽기 (find)
오늘은 Document를 읽어오는 명령어들에 대해 알아보겠습니다. '04. MongoDB Study - 데이터 입력 (insert)' 글에서 입력한 데이터를 토대로 질의(query)를 실행해보겠습니다. find find는 MongoDB에서 기본..
cionman.tistory.com
'Mongo DB' 카테고리의 다른 글
MongoDB 빠른 페이지네이션 찾자 (0) | 2022.01.03 |
---|---|
자주 쓰는 mongoose method (0) | 2021.03.29 |
Mongo DB , NoSQL 시작하기! Step 1 (0) | 2021.02.08 |