Event
9:00 발제
19:30 ~21:30 정예반 강의
생활 계획표
AM 6:00 체조, 아침식사, 산책, 샤워, 설거지, 세탁
AM 8:00 입실, TIL 리뷰, 노드 시간표 및 오늘 목표 체크
AM 8:30 공부 시작
PM 1:00 ~ 2:00 점심 식사
PM 6:00 ~ 7:00 저녁식사
PM 7:00 TIL, WIL 제출
PM 9:00 퇴실 (카톡 확인)
PM 11:00 취침
이번 주 목표
월 : 노드 숙련 3-8까지 (최소 3-4시간 이상 소요, 몰입!!)
화 : 노드 숙련 완강
수 : Lv.2
목 : Lv.3
금 : 제출
오늘 목표
TIL 작성
TIL 리뷰
노드 숙련 최소 3-8
오늘 한 것
TIL 작성
TIL 리뷰
노드 숙련 강의 3-1. 미들웨어 7:41
1. sort("-order") 메서드보다 findOne() 이 앞에 오는 이유
문제
// 작동
const alltodos = require("../models/todo");
const maxOrderByUserId = await alltodos.findOne().sort("-order")
// 오류
const alltodos = require("../models/todo");
const maxOrderByUserId = await alltodos.sort("-order").findOne()
나의 상식으로는 sort를 먼저 하고 findOne을 하는 게 맞았으나 mongoDB는 그렇지 않았다.
시도
동기에게 전달 받은 공식 문서를 꼼꼼히 살펴 보았다.
Cursor.sort()
https://www.mongodb.com/docs/manual/reference/method/cursor.sort/
Cursors
https://www.mongodb.com/docs/v3.0/core/cursors/#cursor-behaviors
Models
https://mongoosejs.com/docs/models.html
Query
https://mongoosejs.com/docs/api/query.html#Query.prototype.sort()
findOne()
http://stitch-docs-old.s3-website-us-east-1.amazonaws.com/mongodb/actions/collection.findOne/
해결
const alltodos = require("../models/todo");
const maxOrderByUserId = await alltodos.findOne().sort("-order")
이 식에서 findOne()은 안이 비어 있는 경우에 첫 번째 document를 반환합니다.
이 식에서 sort(“-order“)는 cursor.sort()를 사용한 것입니다.
cursor는 find query를 실행했을 때의 return 값입니다.
안에 있는 문자열은 mongoose 내에서 실행되는 method 기능의 일부입니다.
원래는 오름차순 정렬이나 -를 붙이면 내림차순 정렬이 됩니다.
일반 js에서의 sort를 생각하면 findOne() 이전에 와도 될 것 같지만,
findOne() 이전의 alltodos는 model 이기 때문에 cursor에 해당하지 않습니다.
그래서 다음과 같이 작성하는 경우 식이 작동하지 않습니다.
const alltodos = require("../models/todo");
const maxOrderByUserId = await alltodos.sort("-order").findOne()
이 경우에는 cursor 가 앞에 없는 sort를 함수로 해석하려고 하여 작동하지 않습니다.
알게된 것
이해가 안 가는 코드가 있다면 공식 문서를 항상 찾아봐야 한다.
정리
mongoDB에서의 findOne() 첫 번째 document를 반환.
mongoDB에서의 cursor.sort() 는 꼭 cursor앞에서 사용해야 하며 안의 기준은 문자열이 와도 상관 없다.
문자열 따옴표 안에 -를 붙이면 내림차순으로 정렬된다.
cursor는 find query를 실행했을 때의 return 값.
체크리스트
[ O ] 예쁜 말로 협업하였는가?
[ O ] 12시간 동안 몰입하였는가?
[ O ] 코딩 시 복사 + 붙여넣기를 하지 않았는가?
[ O ] 친절한 개발자였는가?
[ X ] 오늘을 평가하였을 때 주니어 개발자가 될 수 있겠는가?
실력이 부족하다.
소감
처음에는 울면서 캠프를 수강하셨다는 게 이해가 안 되었는데 나도 울면서 할 것 같다.
'verdantjuly > Today I Learned' 카테고리의 다른 글
TIL 20230621 (0) | 2023.06.21 |
---|---|
TIL 20230620 (0) | 2023.06.20 |
TIL 20230618 (0) | 2023.06.18 |
TIL 20230617 (0) | 2023.06.17 |
TIL 20230616 (0) | 2023.06.16 |