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가 중첩되면 성능 문제가 생길 확률이 크다.
Author And Source
이 문제에 관하여(mongoose의 populate란 ?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ragnarok_code/프로젝트-정리-populate저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)