populate

 - 스키마에서 관계를 설정하고, _id값을 기반으로 전체 객체를 가져오는 예약어

 

사용 및 예제

만약 populate 없이 log를 출력하게 되면

 

author 값이 _id 값으로 출력된다.

 

먼저 사용하기 위해선 Schema에 type:mongoose.Schema.Types.ObjectId, ref:'User'와 같이 관계를 설정해 줘야 한다.

예제에선 Post(글)와 User(사용자) 사이의 관계를 설정했다.

const PostSchema = new mongoose.Schema({
  body: { type: String },
  author:{type:mongoose.Schema.Types.ObjectId, ref:'User',required:true},
  ...
  }

그 후, controller단에서 .populate 를 사용한다.

Post.findOne({_id:req.params.id})
  .populate('author','name id')
  .exec((err,data) => { 
      console.log(data);
  })

 

post를 찾음과 동시에 author 부분에

해당 User의 _id 값 대신, 관계 설정을 한 User 스키마 객체로 출력된다.

 

populate의 사용으로 author부분이 객체로 출력

 

 

객체 전체가 출력되기 때문에 불필요한 정보도 같이 출력되는 것을 볼 수 있다.

원하는 한정된 정보만 얻고 싶다면 다음과 같이 요소를 추가해 주면 된다.

Post.findOne({_id:req.params.id})
  .populate('author','id')
  ...

 

불필요한 값은 제거되고, id 값만 출력되는 모습

 

 

만약 관계가 두 개 이상이라면. populate를 연달아 두 번 선언해 주면

두 가지의 객체를 모두 가져올 수 있다.

 

 

 

 

코딩을 공부하고 있는 학생입니다.

공부한 것을 정리, 공유하기 위해 블로그를 운영하고 있습니다.

포스팅에 틀린 부분이 있다면 과감한 지적, 수정의 한 마디 부탁드립니다! 감사합니다 :)

github.com/holicAZ

 

holicAZ - Overview

holicAZ has 9 repositories available. Follow their code on GitHub.

github.com