내일배움캠프

230710 mongoose populate 연산을 통한 데이터 한 번에 가져오기

Neda 2023. 7. 10. 16:32

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 필드만 제외