[Express] mongoose 사용법 (mongoDB ORM)

2024. 5. 14. 20:00·공부/express
728x90

https://growth-coder.tistory.com/275

 

[Express] sequelize 사용법 (ORM)

https://growth-coder.tistory.com/274 [express] express 웹 서버 기초pacakage.json 생성npm init 명령어로 package.json을 만들어준다. package.json에는 프로젝트가 사용 중인 패키지의 정보가 담겨있다.package.json 문서를

growth-coder.tistory.com

이전 포스팅에서 sequelize와 mysql을 사용하여 ORM 기술을 사용해보았다.

 

이번에는 mongoose와 mongoDB를 사용하여 ORM 기술을 사용해보려고 한다.

 

이번에도 간단하게 Team과 User를 1:N으로 매핑해보자.

 

세팅

먼저 express 서버와 mongoose를 설치한다.

npm install express mongoose

 

schemas 디렉토리를 생성하고 그 안에 index.js 파일을 생성하고 mongoose 기본 세팅을 진행한다.

 

<schemas/index.js>

const mongoose = require('mongoose')

const connect = ()=>{
    if (process.env.NODE_ENV !== 'production'){
        mongoose.set('debug', true)
    }
    mongoose.connect('mongodb://localhost:27017/mongoose_practice')
    .then(()=>{
        console.log("mongodb 연결 성공")
    }).catch((err)=>{
        console.log(err)
    })
    mongoose.connection.on('error', (error)=>{
        console.log(error)
    })
    mongoose.connection.on('disconnected', ()=>{
        console.log("연결 실패 재연결 시도합니다.")
        connect()
    })
}
module.exports = connect

 

이제 이 파일을 import 하는 곳에서 connect 함수를 호출하기만 하면 몽고디비에 연결할 수 있다.

 

스키마 정의

몽고 디비의 collection과 매핑되는 스키마를 정의할 차례이다.

 

Team collection과 User collection이 1:N 연관 관계를 가지고 있는 형태로 스키마를 정의해보자.

 

<schemas/team.js>

const mongoose = require('mongoose')
const {Schema} = mongoose
const teamSchema = new Schema({
    name:{
        type: String,
        required: true
    }
})

module.exports = mongoose.model('Team', teamSchema)

 

<schemas/user.js>

const mongoose = require('mongoose')
const {Schema} = mongoose
const userSchema = new Schema({
    name:{
        type: String,
        required: true
    }, 
    age:{
        type:Number
    },
    team: {
        type: Schema.Types.ObjectId,
        ref: 'Team'
    }
})

module.exports = mongoose.model('User', userSchema)

 

user에서 team을 참조하는 형태로 스키마를 정의하였다.

 

MongoDB 연결 

이제 MongoDB를 연결하고 CRUD api를 만들어보자.

 

const express = require('express')
const connect = require('./schemas/index')
const User = require('./schemas/user')
const Team = require('./schemas/team')
const app = express();
app.use(express.json())
app.listen(3001, ()=>{
    console.log("3001번 포트 서버 실행")
})
connect()

 

MongoDB 연결의 경우 미리 정의한 connect 함수를 가져와서 사용한다.

 

이제 api를 만들어보자.

app.post('/teams', async (req, res)=>{
    const name = req.body.name
    const newTeam = new Team({
        name
    })
    const saveTeam = await newTeam.save()
    res.json(saveTeam)
})
app.get('/teams', async (req, res)=>{
    const teams = await Team.find()
    res.send(teams)
})
app.get('/teams/:id', async(req, res)=>{
    const team = await Team.find({_id : req.params.id})
    res.json(team)
})

app.patch('/teams/:id', async(req, res)=>{
    const team = await Team.findOneAndUpdate({
        _id: req.params.id
    },{
        name: req.body.name
    }, {
        returnOriginal: false
    }
    )
    res.json(team)
})

app.delete('/teams/:id', async(req, res)=>{
    const result = await Team.deleteOne({_id: req.params.id})
    res.json(result)
})

app.post('/users', async (req, res)=>{
    const {name, age, team} = req.body
    const saveUser = User.save({
        name,
        age,
        team
    })
    res.json(saveUser)
})
app.get('/users', async (req, res)=>{
    const users = await User.find().populate('team')
    res.json(users)
})
app.get('/users/:id', async(req, res)=>{
    const user = await User.find({_id : req.params.id}).populate('team')
    res.json(user)
})

app.patch('/users/:id', async(req, res)=>{
    const user = await User.findOneAndUpdate({_id:req.params.id},req.body,{
        returnOriginal: false
    }
)
    res.json(user)
})

app.delete('/users/:id', async(req, res)=>{
    const result = await User.deleteOne({_id: req.params.id})
    res.json(result)
})

 

728x90

'공부 > express' 카테고리의 다른 글

[Express] passport 모듈을 통해 jwt 인증, 인가 구현  (1) 2024.05.21
[Express] passport 모듈을 통해 쿠키 세션 방식으로 로그인 구현  (0) 2024.05.18
[Express] API 작성법 (라우터, 컨트롤러 분리)  (0) 2024.05.16
[Express] sequelize 사용법 (ORM)  (0) 2024.05.12
[express] express 웹 서버 기초  (0) 2024.05.08
'공부/express' 카테고리의 다른 글
  • [Express] passport 모듈을 통해 쿠키 세션 방식으로 로그인 구현
  • [Express] API 작성법 (라우터, 컨트롤러 분리)
  • [Express] sequelize 사용법 (ORM)
  • [express] express 웹 서버 기초
웅대
웅대
알고리즘과 백엔드를 중심으로 열심히 공부 중입니다! 같이 소통하며 공부해요!
    250x250
  • 웅대
    웅대 개발 블로그
    웅대
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 백준 알고리즘
        • dp
        • 문자열
        • 정렬
        • 스택
        • 브루트 포스
        • 이진 탐색
        • 정리
        • 우선순위 큐
        • 자료구조
        • 그래프
        • 기타
        • 그리디
      • 컴퓨터 언어
        • Kotlin
        • Python
        • C#
      • 공부
        • Database
        • Android Studio
        • Algorithm
        • 컴퓨터 구조론
        • Spring
        • lombok
        • AWS
        • Network
        • OS
        • Git & GitHub
        • AI
        • Computer Vision
        • 보안
        • Nginx
        • 프론트
        • express
        • GCP
        • grokking concurrency
        • DevOps
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    RNN
    influxDB CLI
    Vector Store
    AWS Lambda
    ChatPromptTemplate
    ci/cd
    codetree
    binary search
    code tree
    embedding
    Merge
    다익스트라
    bfs
    스프링 OAuth2
    nn.RNN
    스택
    parametric search
    푸쉬 알람
    파이썬
    openvidu 배포
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
웅대
[Express] mongoose 사용법 (mongoDB ORM)
상단으로

티스토리툴바