본문 바로가기

백엔드/MongoDB

DataBase (7) - Search, req.query

정렬 순서

mogoose을 활용해서 간단하게 data순서, 정렬을 바꿀 수 있다. asc는 오름차순 / desc는 내림차순이다. 정렬기준을 정하고 해당 값을 적어주면 간단하게 데이터가 보여지는 정렬을 바꿀 수 있다.

 

 

Mongoose v7.3.3: Redirect to API

Redirecting to proper API page, please wait This Page requires JavaScript to Redirect old links properly

mongoosejs.com

 

.sort( { 정렬기준: "asc // desc " } )

 

홈 화면 정렬기준

 

홈 화면에 나오는 비디오를 생성일 기준으로 내림차순을 하였다. 기존에는 최근 생성 목록이 제일 하단에 노출되었다.

 


Search 검색기능

* 진행 과정
라우터 생성 -> 컨트롤러 생성 -> view 화면(pug) -> 컨트롤러 설정

:id -> req.params
form이 post 방식일 때 input 내용 -> req.body
form이 get 방식일 때 input 내용 -> req.query

req.query는  URL에서 데이터를 가져올 때 주로 사용한다. Input name=keyword로 보낸 값이 url로 저장이 된다. 이 값을 가져올 때 사용할 수 있다. 일반적인 검색사이트에서도 자주 볼 수 있다.

좌 ) 문제점. 우) 핵결

문제점 1 : const video가 if문 안에 있기 때문에 render할 때 video값을 주지 못한다. 그래서 if문 안에 res.render을 한 번 더 적어줘도 되지만 그건 너무 구리다. 그래서 업데이트 가능한 let을 선언한 후 업데이트하는 방향으로 코드를 작성하는 것이 좋다.

해결 1 : let 선언해서 값을 업데이트 해주고 마지막 render에서 그 값을 불러온다.

 

문제점 2 : 검색할 때 정확한 영상 이름으로만 검색이 된다. 

해결 2 :  regular expression을 사용하여 검색하면 된다.

regular expression

keyword, "i"   --->   keyword가 포함된 모든 단어를 검색
^keyword, "i"  --->  keyword로 시작하는 단어를 검색
keyword$, "i" ----> keyword로 끝나는 단어를 검색

regular expression을 사용하기 위해서는 regex연산자를 사용해야한다.

 

"

title: { $regex: new RegExp(keyword,"i") }

키워드가 포함된 타이틀을 찾는다.

 

title: { $regex: new RegExp(`^${keyword}`,"i") }

title: { $regex: new RegExp(`${keyword}$`,"i") }

 

 

mogoDB에 포함된 필터엔진으로 가능한 일이다.

 

$regex — MongoDB Manual

Docs Home → MongoDB Manual This page describes regular expression search capabilities for self-managed (non-Atlas) deployments. For data hosted on MongoDB Atlas, MongoDB offers an improved full-text search solution, Atlas Search, which has its own $regex

www.mongodb.com

 

반응형