populate
- 스키마에서 관계를 설정하고, _id값을 기반으로 전체 객체를 가져오는 예약어
사용 및 예제
만약 populate 없이 log를 출력하게 되면
먼저 사용하기 위해선 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 스키마 객체로 출력된다.
객체 전체가 출력되기 때문에 불필요한 정보도 같이 출력되는 것을 볼 수 있다.
원하는 한정된 정보만 얻고 싶다면 다음과 같이 요소를 추가해 주면 된다.
Post.findOne({_id:req.params.id})
.populate('author','id')
...
만약 관계가 두 개 이상이라면. populate를 연달아 두 번 선언해 주면
두 가지의 객체를 모두 가져올 수 있다.
코딩을 공부하고 있는 학생입니다.
공부한 것을 정리, 공유하기 위해 블로그를 운영하고 있습니다.
포스팅에 틀린 부분이 있다면 과감한 지적, 수정의 한 마디 부탁드립니다! 감사합니다 :)