jongviet

Aug 20, 2021 - mongoose populate 본문

mongoDB

Aug 20, 2021 - mongoose populate

jongviet 2021. 8. 20. 20:03

*8월20일

-실무 간 mongoose populate 기능을 이용한 join 코드 개선이 수행 과제로 잡혔다. 물론 난 신입으로 아직 업무를 부여 받은 건 아니지만 어떻게 개선이 된다는 건지 궁금해서 찾아봤다.

 

*mongoose populate 기능을 이용한 join 코드 개선

->DB에서 조회 후, 자바스크립트 단에서 합쳐 주는 개념, join 처럼 db 자체에서 합쳐주는 것은 아님

 

스키마 설계

const userSchema = new mongoose.Schema({

name: String,

friends: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }], //이런식으로 지정해줘야 join처럼 모든 데이터 가져올 수 있음

bestFriend: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }],

});

mongoose.model('User', userSchema);

 

조회

User.findOne({ name: 'zero' }).populate('bestFriend').exec((err, data) => { //bestFriend를 populate해서 해당 oid를 기준으로 객체의 모든 정보를 받아옴 // 즉 $oid가 실제 User객체로 치환된 것임;

console.log(data);

});

 

User.findOne({ name: 'zero' }).populate('bestFriend', 'name bestFriend').exec((err, data) => { //두번째 인자가 projection 역할을 해서 _id + 입력된 항목만 조회됨

console.log(data);

});

 

User.findOne({ name: 'zero' }).populate('bestFriend').populate('friends').exec((err, data) => { //연달아쓰면

console.log(data);

});

 

-projection은 특정한 부분만 선택하는 개념, 좀 더 좁은 범위의 조회 느낌

 

*참조 블로그 : https://www.zerocho.com/

Comments