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

다형성 데이터 저장

이 페이지의 내용

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

동일한 쿼리 에 서로 다른 필드나 데이터 유형이 함께 포함된 문서에 액세스 해야 하는 경우 다형성 데이터를 저장합니다.

MongoDB 는 유연한 데이터 모델을 사용하므로 단일 컬렉션 의 문서가 동일한 구조를 가질 필요가 없습니다. 다형성 데이터는 문서 필드나 데이터 유형이 다양한 단일 컬렉션 의 데이터입니다.

이 예시 에서 애플리케이션 은 다양한 스포츠를 하는 프로 운동 선수를 저장합니다. 쿼리는 모든 운동 선수에 액세스 하지만 각 선수에 대해 저장된 속성은 스포츠에 따라 다릅니다.

다형성 패턴 은 서로 다른 문서 형태를 동일한 컬렉션 에 저장하므로 스포츠에 관계없이 모든 운동 선수에 액세스 해야 하는 쿼리의 성능이 향상됩니다.

1
db.athletes.insertMany( [
{
sport: "bowling",
name: "Earl Anthony",
career_earnings: 1440000,
perfect_games: 25,
pba_championships: 43,
events: [
{
name: "japan_pba",
score: 300,
year: 1972
}
]
},
{
sport: "tennis",
name: "Steffi Graf",
career_earnings: 21000000,
grand_slam_wins: 22,
surfaces: [ "grass", "clay", "hard court" ]
},
{
sport: "cricket",
name: "Sachin Tendulkar",
career_earnings: 8000000,
runs: 15921,
centuries: 51,
teammates: [ "Arshad Ayub", "Kapil Dev" ]
}
] )
2

athletes 컬렉션 의 문서에 서로 다른 필드가 있더라도 단일 쿼리 로 모든 문서를 반환할 수 있습니다.

db.athletes.find()

출력:

[
{
_id: ObjectId('6706dcd66fd2c3b24f2e7e92'),
sport: 'bowling',
name: 'Earl Anthony',
career_earnings: 1440000,
perfect_games: 25,
pba_championships: 43,
events: [ { name: 'japan_pba', score: 300, year: 1972 } ]
},
{
_id: ObjectId('6706dcd66fd2c3b24f2e7e93'),
sport: 'tennis',
name: 'Steffi Graf',
career_earnings: 21000000,
grand_slam_wins: 22,
surfaces: [ 'grass', 'clay', 'hard court' ]
},
{
_id: ObjectId('6706dcd66fd2c3b24f2e7e94'),
sport: 'cricket',
name: 'Sachin Tendulkar',
career_earnings: 8000000,
runs: 15921,
centuries: 51,
teammates: [ 'Arshad Ayub', 'Kapil Dev' ]
}
]
3

다형성 패턴 은 특정 스포츠에 특정한 필드를 쿼리 하기 위해 추가 로직이 필요하지 않습니다. 예를 예시, 다음 쿼리 는 20 번 이상의 그랜드슬램 승리를 달성한 운동 선수를 반환하며, 이는 테니스를 치는 운동 선수에게만 적용됩니다.

db.athletes.find(
{ grand_slam_wins: { $gt: 20 } }
)

출력:

[
{
_id: ObjectId('6706cd8a6fd2c3b24f2e7e8d'),
sport: 'tennis',
name: 'Steffi Graf',
career_earnings: 21000000,
grand_slam_wins: 22,
surfaces: [ 'grass', 'clay', 'hard court' ]
}
]
  • 상속 패턴 사용

  • 스키마 유효성 검사

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

돌아가기

다형성 데이터