mongoose의 populate란 ?

Mongoose란 ?

node.js와 MongoDB를 연결해주는 ODM(Object Document Mapping): 객체와 문서를 1대1로 매칭하는 역할

Populate

MongoDB 스키마를 만들다 보면 필드 내에 다른 다큐먼트의 ObjectID를 쓰는 경우가 존재

스키마 정보1

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const personSchema = Schema({
  _id: Schema.Types.ObjectId,
  name: String,
  age: Number,
  stories: [{
    type: Schema.Types.ObjectId,
    ref: 'Story'    
  }]
});	

데이터 조회1

{
 	_id: { $oid: 5a23c1b5d52a003c98e13flc },
    name: 'hongjinhyeok',
    age: 25,
    stories: { $oid: 5a23c1b5d52a003c98e13flb }
}

스키마 정보2

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const storySchema = Schema({
  author: { 
    type: Schema.Types.ObjectId, 
    ref: 'Person'
  },
  title: String,
  fans: [{
    type: Schema.Types.ObjectId,
    ref: 'Person'
  }]
});

데이터 조회2

{
 	_id: { $oid: 5a23c1b5d52a003c98e13flc },
    name: 'hongjinhyeok',
    age: 25,
    stories: {
     	author: { $oid: 5a23c1b5d52a003c98e13fld },
        title: 'How to be a good programmer',
        fnas: { $oid: 5a23c1b5d52a003c98e13fld }
    }  
}

이렇게 populate를 활용하면 Schema.Types.ObjectId가 참조하는 다른 document를 조회할 수 있다.

  • populate는 간단하게 이런 id값을 펼쳐서 보여주는 기능.
  • populate $oid로 모두 조회를 해서 자바스크립트단에서 합쳐주는 것
  • JOIN처럼 DB 자체에서 합쳐주는 것이 아니므로 성능이 좋지 못하다.
  • 특히 populate가 중첩되면 성능 문제가 생길 확률이 크다.

좋은 웹페이지 즐겨찾기