해결된 질문
작성
·
219
1
Pretty()라는게 있는데 nodejs에서 find뒤에 사용하니
pretty() is not a function이라고 나옵니다.
이걸 사용해서 원하는 데이터만 보이도록 출려하고 싶은데 pretty말고 다른 방법있을까요?
아, ! 그리고 실제 업무에서 pretty()를 잘 사용하나요?
답변 3
1
1
pretty는 shell(강의 초반에 mongoDB Compass에서 디비 명령어를 작성했던 곳)에서만 사용하는 명령어라서 실제 노드 코드상으로는 사용할 수가 없어요! 그래서 not a function이라는 오류가 나온거에요.
음 원하시는 용도는 mongoose의 select를 이용하시면 될 것 같아요. mongoDB 공식문서상으로는 projection이에요
const blog = await Blog.find({}).select('content createdAt') 이런식으로 하면 _id를 포함한 선택한 필드들(content, createdAt)만 디비에서 리턴이 되요. 관계형 데이터베이스에서의 SELECT content, createdAt FROM blogs와 비슷한 문법이죠. 근데 참고로 select를 해도 퍼포먼스에는 큰 영향이 없어요. 필드 단위로 저장되는게 아니라 문서 단위로 저장이 되기 때문이에요. 그래서 하나의 필드만 select 하셔도 몽고디비 서버에서는 문서 전체가 하드디스크에서 메모리상으로 읽어져요.
제가 select를 사용하는 경우는 API를 호출한 사용자의 권한에 따라 제한된 정보를 보여줘야할 때 사용해요. 그러면 애초에 디비에서 노드 서버로 넘어오지 않게 되죠. 대표적으로 비밀번호나 개인정보들이 있어요!
0
lean() 사용하셔도 괜찮아요
다만 lean()을 사용하게 되면 디비에서 받은 값이 mongoose Document형태가 아니라 mongoose가 추가해주는 함수들을 접근할 수 없게 되요. find한 결과를 바로 res.send()하는거면 lean을 써주셔도 되요.
그리고 lean()을 쓴다고 해서 속도가 빨라지지는 않을거에요. 다만 노드 서버에서 차지하게 되는 메모리양이 조금 줄어들어요.