Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

상속 패턴 사용

이 페이지의 내용

  • 이 작업에 대하여
  • 단계
  • 자세히 알아보기

문서가 대부분 유사하고 함께 읽을 수 있도록 동일한 컬렉션 에 유지하려는 경우 상속 패턴 을 사용합니다. 상속 패턴 은 공통 필드가 있는 상위 엔터티를 사용하여 가변 형식이 있는 하위 엔터티를 그룹 합니다. 하위 엔터티는 고유한 필드를 가질 수 있지만 공통 필드로 인해 서로 밀접하게 관련되어 있습니다.

이 예시 에서 저장 은 상속 패턴 을 사용하여 다양한 유형의 미디어 를 저장 합니다. book 상위 엔터티는 titleauthor 와 같은 공통 필드를 저장하며 여러 하위 엔터티가 book 엔터티에서 상속됩니다. 예를 예시 오디오북, 인쇄물, 전자책에는 공통 필드가 있으며 미디어 유형에 특정한 고유 필드도 있습니다.

상속 패턴 은 이처럼 약간 다른 엔터티를 동일한 컬렉션 에 저장하므로 유형에 관계없이 모든 책에 액세스 해야 하는 쿼리의 성능이 향상됩니다.

1
db.books.insertMany( [
{
product_type: "ebook",
title: "Practical MongoDB Aggregations",
author: "Paul Done",
rating: 4.8,
genres: [ "programming" ],
pages: 338,
download_url: "<url>"
},
{
product_type: "audiobook",
title: "Practical MongoDB Aggregations",
author: "Paul Done",
rating: 4.6,
genres: [ "programming" ],
narrators: [ "Paul Done" ],
duration: {
hours: 21,
minutes: 8
},
time_by_chapter: [
{
chapter: 1,
start: "00:00:00",
end: "01:00:00"
},
{
chapter: 2,
start: "01:00:00",
end: "01:55:00"
}
]
},
{
product_type: "physical_book",
title: "Practical MongoDB Aggregations",
author: "Paul Done",
rating: 4.9,
genres: [ "programming" ],
pages: 338,
stock: 12,
delivery_time: 2
}
] )

앞의 문서는 몇 가지 공통 필드를 주식 하며 product_type 에 따라 고유한 필드를 갖습니다. 예를 예시 다음과 같습니다.

  • ebook 문서에 download_url 필드 가 있습니다.

  • audiobook 문서에 time_by_chapter 필드 가 있습니다.

  • physical_book 문서에 delivery_time 필드 가 있습니다.

2

books 컬렉션 의 문서는 모양이 다르지만 단일 쿼리 로 모든 문서를 반환할 수 있습니다.

db.books.find()

출력:

[
{
_id: ObjectId('66eb4160ef006be6eda8e2ee'),
product_type: 'ebook',
title: 'Practical MongoDB Aggregations',
author: 'Paul Done',
rating: 4.8,
genres: [ 'programming' ],
pages: 338,
download_url: '<url>'
},
{
_id: ObjectId('66eb4160ef006be6eda8e2ef'),
product_type: 'audiobook',
title: 'Practical MongoDB Aggregations',
author: 'Paul Done',
rating: 4.6,
genres: [ 'programming' ],
narrators: [ 'Paul Done' ],
duration: { hours: 21, minutes: 8 },
time_by_chapter: [
{ chapter: 1, start: '00:00:00', end: '01:00:00' },
{ chapter: 2, start: '01:00:00', end: '01:55:00' }
]
},
{
_id: ObjectId('66eb4160ef006be6eda8e2f0'),
product_type: 'physical_book',
title: 'Practical MongoDB Aggregations',
author: 'Paul Done',
rating: 4.9,
genres: [ 'programming' ],
pages: 338,
stock: 132,
delivery_time: 2
}
]
3

상속 패턴 은 특정 미디어 유형에 특정한 필드를 쿼리 하기 위해 추가 로직이 필요하지 않습니다. 예를 예시, 다음 쿼리 는 기간이 20 시간보다 긴 책을 반환하며, 이는 제품 유형 audio_book 에만 적용됩니다.

db.books.find(
{
"duration.hours": { $gt: 20 }
}
)

출력:

[
{
_id: ObjectId('66eb4160ef006be6eda8e2ef'),
product_type: 'audiobook',
title: 'Practical MongoDB Aggregations',
author: 'Paul Done',
rating: 4.6,
genres: [ 'programming' ],
narrators: [ 'Paul Done' ],
duration: { hours: 21, minutes: 8 },
time_by_chapter: [
{ chapter: 1, start: '00:00:00', end: '01:00:00' },
{ chapter: 2, start: '01:00:00', end: '01:55:00' }
]
}
]
  • 다형성 데이터 저장

  • 스키마 유효성 검사

  • 쿼리를 지원하는 인덱스 생성

돌아가기

다형성 패턴