Mongo对我的数据有什么好的数据模型?

时间:2014-12-17 23:37:49

标签: mongodb data-modeling

我希望存储以下数据:

  • 电视节目

  • 电视节目中的季节

  • 一季内的剧集

  • 一集中的人才

我目前拥有它存储在4个表(节目,季节,剧集,天赋)中的MySQL。我希望在MongoDB中找到合适的数据模型。

我正在考虑嵌套这样的数据: 展示 - > Seasons-> Episodes->人才

这样嵌套数据会难以更新某些字段吗?

我是新手,所以我愿意接受任何建议。

1 个答案:

答案 0 :(得分:1)

深度嵌套的结构可能会使MongoDB集合难以使用。但是,如果您想构建嵌套结构,可以执行以下操作:

  [{'show':{'name':'ShowName', 
             'seasons':[{'name':'SeasonOne',
                         'episodes':
                                    [{'name':'EpisodeOne',
                                      'talents':['talentOne',
                                                 'talentTwo',
                                                 'talentN']
                                    }]
                        },
                        {'name':'SeasonTwo',
                         'episodes':
                                    [{'name':'EpisodeOne',
                                      'talents':['talentOne',
                                                 'talentTwo',
                                                 'talentN']
                                    }]
                        }]
           }},
      {'show':{'name':'ShowNameTwo', 
             'seasons':[{'name':'SeasonOne',
                         'episodes':
                                    [{'name':'EpisodeOne',
                                      'talents':['talentOne',
                                                 'talentTwo',
                                                 'talentN']
                                    }]
                        },
                        {'name':'SeasonTwo',
                         'episodes':
                                    [{'name':'EpisodeOne',
                                      'talents':['talentOne',
                                                 'talentTwo',
                                                 'talentN']
                                    }]
                        }]
           }}]  

然后您可以按名称查询特定节目:

db.show.find({"show.name":"ShowName"})

甚至可以获得所有能够为某些天赋加星标的节目:

db.show.find({"show.seasons.episodes.talents":"talentOne"})