如何在MongoDB中存储需要从两端访问的数据(双向)

时间:2012-06-01 01:03:31

标签: mongodb

我有很多球员和球队。球队由很多球员组成。玩家可以属于多个团队。我需要找到特定球队中的哪些球员或某个球员所在的球队。

最好是使用DBRefs,一个包含嵌入式团队的玩家集合,一个包含嵌入式播放器的团队集合,两个集合,还是其他东西,或者MongoDB在这里根本不是一个好选择?

1 个答案:

答案 0 :(得分:1)

我希望您已阅读this page以及MongoDB中有关架构设计的其他多个讨论 - 查看类似示例以及其他人正在考虑的内容会非常有帮助。

话虽如此,听起来你的数据集不会很大 - 是吗?如果是这种情况,它可能对性能无关紧要,您可能应该首先设计,以便从您的应用程序中清晰地访问。

我认为拥有一组球队和一系列球员是合理的,然后决定是否要在每个球队中嵌入一系列球员,代表球队中的谁或嵌入的球队每个球员文件,表明他们所在的球队。该数组可以是ID或ID和名称等的数组。

无论您选择上述哪种方式,查询都很容易 - 如果您在球员中嵌入了球队阵列,要找出特定球队中的所有球员,您只需查询在阵列中拥有该球队的所有球员。查询可能类似于:

db.players.find({ “teams.name”: “TeamRocky”})

这将返回在“团队”阵列中拥有该团队名称的玩家的所有玩家文档(这只是一个示例,您的实际实现可能会大不相同)。如果您在每个团队文档中嵌入播放器阵列,那就简单了。

在决定这一点时需要考虑的事项可能不仅包括您将如何查询数据,还包括您希望更新数据的方式和频率 - 玩家是否会在团队之间移动?团队是否会解散,如果是,您是否必须跟踪他们的历史信息等。

我鼓励您尝试一些架构并构建一个小型原型然后看看哪些有问题,并在您更熟悉应用程序要求时更改/改进架构。