다형성 데이터 저장
동일한 쿼리 에 서로 다른 필드나 데이터 유형이 함께 포함된 문서에 액세스 해야 하는 경우 다형성 데이터를 저장합니다.
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' ] } ]