230710 mongoose populate 연산을 통한 데이터 한 번에 가져오기
mongoDB는 join을 지원하지는 않지만 그와 유사한 lookup 연산을 지원한다.
mongoose에서는 populate 연산을 통해 여러 컬렉션의 데이터를 한 번에 가져올 수 있다.
아래와 같이 글 데이터를 만들었다. userId는 users 컬렉션의 user 데이터를 가리키는 objectId이다.
글 데이터에는 userId가 아닌 user의 이름이 필요하다.
populate 연산을 사용하면 userId 값을 통해 users 컬렉션의 user 데이터를 가져올 수 있다.
posts = await Post.find().populate("userId");
이렇게 user 데이터를 가져왔더니 user 데이터에는 또 자신이 작성한 posts라는 배열이 있다.
현재 게시글과 상관 없는 데이터를 클라이언트에게 보내는 것은 대역폭 낭비이다.
populate 연산에서 특정 필드만을 선택하기 위해서 두 번째 인자를 사용할 수 있다.
posts = await Post.find().populate("userId","name");
+필드 : 포함
-필드: 제외
띄어쓰기로 여러 필드 선택
posts = await Post.find().populate("userId","name email"); //name과 email 필드만 선택
posts = await Post.find().populate("userId","+name"); //name 필드를 강제 포함
posts = await Post.find().populate("userId","-posts"); // posts 필드만 제외
'내일배움캠프' 카테고리의 다른 글
230712 리액트 같은 src 경로 이미지 리로드하기 (presigned url 업로드 미리보기 시 ) (0) | 2023.07.12 |
---|---|
230711 AWS S3 Presigned URL로 게시글 이미지 업로드 (0) | 2023.07.11 |
230709 내일배움캠프 8주차 WIL (0) | 2023.07.09 |
230708 VScode에서 import문을 별칭을 사용하여 절대 경로로 사용하기 (0) | 2023.07.09 |
230707 jwt 토큰을 통한 인증 (0) | 2023.07.07 |