MongoDB 에서 특정조건 해당하는 데이터 반환 ( Express Router get 요청)

HYEJIN·2022년 8월 5일
1

Node.js

목록 보기
3/4

MongoDB에서 특정 조건에 해당하는 데이터를 반환하는 GET 요청을 처리하기 위한 API

  • 해당 코드는 router를 별도로 구현한 코드만 있고, app.use를 통한 경로를 연결하는 코드는 생략되어 있음.

예시1

  • 특정 전공(major) 을 GET 요청으로 받아,
    해당 전공의 학생들만 JSON 형태로 내보내는 코드
  • URI에 입력되는 형태는 /students?major=전공

데이터형식
[
{
name: "Tom",
age: 20,
major: "컴퓨터공학과",
}
...
]

const { Router } = require("express");
const { Student } = require("../models");

const router = Router();

// 지시사항을 참고하여 코드를 완성하세요.
router.get("/", async (req, res) => {
    // const searchMajor = req.query.major;
   const {major} = req.query; 
    const data = await Student.find({major});
    res.send(data);
  
});


module.exports = router;

위의 코드는 메인에서 이미 /students로 연결된 라우터
Student는 mongoose Schema 생성 후 model로 만든 것

req.query를 이용하여 /students?major=전공 > 여기에 들어오는 전공값을 받아온다.

쿼리를 이용하여 major가 동일한 것을 data 변수에 담아준다.
findfindone의 차이는,
find는 배열형태로 객체를 여러가지를 담아주지만,
findOne은 하나만 객체로 담아준다.


예시2

  • /tickets?airline=대한항공&year=2021 검색 시 데이터를 화면에 출력
  • req.query.이름

데이터형식 일부
[
{
airline: "대한항공",
country: "일본",
date: "2021-12-11",
},
{
airline: "대한항공",
country: "독일",
date: "2021-02-10",
},
{
airline: "에어서울",
country: "호주",
date: "2022-07-12",
},
...
]

const {Ticket} = require('../models');
const {Router} = require('express');
const router = Router();

router.get('/', async (req,res,next)=>{
    const {airline} = req.query;
    const {year} = req.query;
    
    const data = await Ticket.find({
        airline,
        date:{
            "$gte":new Date(year,1,1),
            "$lte":new Date(year,12,31)
        },}
    );
    res.json(data);
})

module.exports = router;

위의 코드는 메인에서 이미 /tickets로 연결된 라우터
Ticket은 mongoose model

특정 년도를 검색하기 위해서는 검색된 년도의 1월 1일 이상, 12월 31일 이하인 데이터를 찾아야 한다.
어떠한 특정영역은 $lt, $lte, $gt, $gte 를사용하여 range query 작성 가능

{ "$gte": 크거나 같은 데이터, "$lte": 작거나 같은 데이터 }

date:{
            "$gte":new Date(year,1,1),
            "$lte":new Date(year,12,31)
        }

위와같이 작성할 경우, year라는 변수가 query로 2021로 들어왔다고 가정할때
2022년 1월 1일 ~ 2022년 12월 31일 까지의 데이터로 범위를 지정하게된다.


0개의 댓글