inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

mongoDB 기초부터 실무까지(feat. Node.js)

PUT /user/:userId

안녕하세요! 질문있습니다.

해결된 질문

133

ygh

작성한 질문수 19

1

안녕하세요! 좋은강의 감사드립니다.

이번 수업시간에 궁금한점이 생겨 질문드립니다.

회원수정 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 수행)

mongoose mongodb DBMS/RDBMS aws rest-api javascript nodejs 데이터 엔지니어링

답변 1

1

김시훈 (도도소프트)

ygh님 안녕하세요 :)

좋은 질문입니다! findByIdAndUpdate를 하면 모든 작업은 데이터베이스에서 하나의 operation으로 이루어집니다. 데이터베이스에서 해당 문서를 탐색하고 수정을 한 후 결과값을 돌려주는데요. new를 설정하지 않으면(기본값이 false에요) 수정되기 전 문서를 메모리에 가지고 있다가 수정이 완료 된 후 기존 문서를 돌려줘요. new를 true로 하면 수정된 문서를 보내주구요. 그래서 성능차이도 사실상 없거나 미비하다고 보면 되요. 그래서 성능을 조금이라도 올리고 싶다면 다음 방법보다는 findByIdAndUpdate가 더 효율적이죠:

findOne() -> 노드에서 문서 수정 -> document.save()

이 방법으로 하면 디비를 2번 거치는거라 "대략적으로" 2배로 더 느려질 수 있어요.

아 그리고 참고로 findById 이 부분은 mongoose가 findOne({ _id: id }) 이런식으로 중간에 변환해줍니다. 성능상으로나 몽고에 들어가는 명령으로나 동일하다가 보면 되요. 그냥 조금이라도 코드를 더 간결하게 해주는 용도에요 :)

0

ygh

좋은 답변 감사드립니다:) 도움이 됐습니다!

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