안녕하세요! 질문있습니다.
안녕하세요! 좋은강의 감사드립니다.
이번 수업시간에 궁금한점이 생겨 질문드립니다.
회원수정 API에서 findByIdAndUpdate 하는 부분이 있는데요.
해당 method의 세번째 인자값으로 { new: true }를 추가하면 해당 API의 결과값으로 업데이트된 user의 data를 가져오게 되는데요.
이때의 세부 과정이 궁금합니다.
먼저, client로부터 입력받은 userId에 해당되는 user data를 mongodb로 부터 가져와서 그 가져온 user data 값을 애플리케이션단에서 변경하는 것인지, (select -> update query 수행)
아니면 update query이후 한번의 조회 query를 또 수행시키는 방식으로 업데이트된 user data를 조회하는 것인지 궁금합니다. (select -> update -> select query 수행)
답변 1
1
ygh님 안녕하세요 :)
좋은 질문입니다! findByIdAndUpdate를 하면 모든 작업은 데이터베이스에서 하나의 operation으로 이루어집니다. 데이터베이스에서 해당 문서를 탐색하고 수정을 한 후 결과값을 돌려주는데요. new를 설정하지 않으면(기본값이 false에요) 수정되기 전 문서를 메모리에 가지고 있다가 수정이 완료 된 후 기존 문서를 돌려줘요. new를 true로 하면 수정된 문서를 보내주구요. 그래서 성능차이도 사실상 없거나 미비하다고 보면 되요. 그래서 성능을 조금이라도 올리고 싶다면 다음 방법보다는 findByIdAndUpdate가 더 효율적이죠:
findOne() -> 노드에서 문서 수정 -> document.save()
이 방법으로 하면 디비를 2번 거치는거라 "대략적으로" 2배로 더 느려질 수 있어요.
아 그리고 참고로 findById 이 부분은 mongoose가 findOne({ _id: id }) 이런식으로 중간에 변환해줍니다. 성능상으로나 몽고에 들어가는 명령으로나 동일하다가 보면 되요. 그냥 조금이라도 코드를 더 간결하게 해주는 용도에요 :)
option usecreateindex is not supported 오류 나면은
0
146
1
Schemaless 특성을 재생시 검은화면이 나와요
0
240
1
user 내장 시 ref 필드 필요성
0
239
1
await 관련해서 질문드릴게 있습니다!!
0
292
2
섹션6의 3번째 강의 faker파일이 어디있나요?
0
308
1
$elemMatch 질문이 있습니다.
0
245
1
DB 업데이트에 실패했을 상황에서 대처는 어떻게 할 수 있나요.
2
766
2
블로그에 user 데이터를 추가하는 방법에 대해서
0
237
1
blog 데이터 생성시 user 관련 오류
0
351
1
age 예외 처리를 별도로 하신 이유가 궁금합니다.
2
301
2
delete 메소드가 많은 이유가 궁금합니다.
0
181
1
unique validation 처리
0
296
1
updateMany에서 user._id를 못찾는 상황
1
396
1
find() 가 리턴하는 instance member
1
431
3
몽고 db를 백업방법을 부탁합니다.
0
603
1
인덱스 생성시점
0
712
1
$pull 문법에 대한 질문
0
359
1
comment의 id가 생성되는 시점
1
301
1
리팩토링 강의에서 라우터 리팩토링 전개연산자(...)
1
315
1
session.abortTransaction()에 대한 실제 예시 문의
0
287
1
섹션9 Computed Fields 강의에서, 다음 강의 가기 전 빠진부분
-1
407
1
faker 패키지 취약성 이슈
1
485
1
라우터 리팩토링
0
341
1
섹션4 진행중, mongoose 질문
0
309
1





