MongoDB에서 특정 조건에 해당하는 데이터를 반환하는 GET 요청을 처리하기 위한 API
- 해당 코드는 router를 별도로 구현한 코드만 있고, app.use를 통한 경로를 연결하는 코드는 생략되어 있음.
- 특정 전공(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 변수에 담아준다.
find와 findone의 차이는,
find는 배열형태로 객체를 여러가지를 담아주지만,
findOne은 하나만 객체로 담아준다.
- /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일 까지의 데이터로 범위를 지정하게된다.