getEidt
data 편집하는 것도 역시 video를 find를 한 후 진행한다. if-else로 데이터가 있는 지 확인 한다. 주로 if로 에러를 검증하고 else로 실행하는 코드를 작성한다.

edit로 이동하면 input창에 생성할 때 입력한 정보들이 자동으로 입력되어 있어야 유저가 수정하기 편하다. 이는 input에 value 값을 줘서 확인할 수 있다.

단. 해시태그의 경우 배열로 저장 되어 있어 불러왔을 때 Input창에 배열 형태로 불러온다. 일반 텍스트로 불러오기 위해 join함수를 사용 한다.

postEdit
POST Eidt도 video를 find한 후 진행한다. video를 찾은 후 새로 입려된 값으로 하나씩 업데이트를 해준다. 이것보다 좋은 방식이 있다. (숏컷을 배우기 위해 어려운 것부터..)
word.startsWith("#") ? word : `#${word}`
단어 첫번째가 #인 경우 word로 리턴하고 아닌 경우 #을 붙여 리턴한다. 수정할 경우 #이 하나 더 붙는 상황을 해결하기 위해 삼항연산자를 활용한다.
word.startsWith("#") ? `#${word.replace(/#/g, "")}` : `#${word}`
해쉬태그 앞에 여러개의 #이 붙었을 경우 #을 없애주고 하나의 #만 남겨준다. 글로벌 정규식으로 #을 모두 골라서 empty로 교채해준다. (/#/g, "")

Model에서 할 수 있는 것들이 많다. find, findById, findByIdAndDelete, findOne... 등등 ID값이 아닌 데이터의 타이들(video.title)로 저장된 DB를 찾을 수 있다. 위에 처럼 하나씩 모든 것을 업데이트하는 방법이 아닌 model 중findByIdAndUpdate() 함수를 사용하면 편리하고 깔끔하게 db 업데이트를 할 수 있다.
findByIdAndUpdate( id, update_information )
findByIdAndUpdate는 2개의 인자가 필요하다. 영상의 ID와 업데이트 할 정보를 넘겨줘야 한다.

await Video -> Video는 Model을 쓰기 위해 정의한 Video.
const Video = mongoose.model("Video", videoSchema);
video는 데이터베이스에 저장한 영상 object.
await Video.exists(조건)
영상이 존재하는지 확인하는 함수. video object를 불러오는 것 대신 존재유무만 확인할 때 사용할 수 있다. (true, false 반환). 위해서 비디오를 수정할 때는 object 전체를 불러올 필요 없이 exists로 확인만 하면된다. 찾고자 하는 조건을 입력하면 된다. 예를들어 video.title:"hello" 이거나 video object에 할당된 id값이 req.params의 id와 같은지 비교할 수 있다. {_di : id} 단 getEidt에서는 video object 내용을 edit 템플릿에 보내줘야 해서 findById를 활용해야한다.
Middlewares
해시태그를 처리(#을 붙여주거나 삭제) or 코멘트를 저장하기 전에 비속어 필터 등 데이터베이스를 저장하거나 업데이트하기 전 mongoose의 Middleware를 활용할 수 있다.(pre, post, hook) 데이터 베이스가 저장되기 전에 어떤 것들을 우선적으로 처리하고 나머지를 처리할 수 있게 도와준다.
'백엔드 > MongoDB' 카테고리의 다른 글
| DataBase (7) - Search, req.query (0) | 2023.07.12 |
|---|---|
| DataBase (6) - Middlewares (0) | 2023.07.11 |
| DataBase (4) - 정규식표현, 16진수(24byte) 문자열 (0) | 2023.07.05 |
| DataBase (3) - Create Data (0) | 2023.07.03 |
| DataBase (2) - callback, promise (0) | 2023.06.30 |