您好我已经开始在一个小型家庭项目中学习Mongo,以确定它是否适用于我们的某个产品的解决方案。在沿着我梦想的路径走下去之前,我想通过堆栈溢出来运行它,以确定这个结构是否合理,并且数据可以在此后的数年内有效地访问。
该应用程序是收集足球比赛的点差并允许用户进行模拟投注的应用程序。这为各种有趣的分析打开了大门,从投注模式到价差如何随时间变化等。
你会从上面的列表中注意到我有两次下注。这是我遇到的一个重大问题。存储用户下注的游戏的文档将存储在何处?在游戏或用户集合中。两者都有道理。如果我将它存储为另一个而不是我必须查询另一个中的大列表以显示数据。例如,如果我有users.bets,那么当我想显示给定游戏的所有赌注时,我必须在所有users.bets中查找该game.id,反之亦然。这有效吗?理智?
我想这对我来说是个难点。我知道如何在关系数据库中处理多对多,但不是在这里。是存储多对多的第三个集合仍然是mongo的方式。
欢迎提出意见和参考资料。
答案 0 :(得分:1)
对数据进行非规范化没有任何问题 - 如果在多个地方进行查询,那么在您的应用程序中将数据存储在多个位置是有意义的。
当您考虑如何构建事物时要考虑的事项是数据在X个月中会有更多内容的样子。
如果此应用程序收集数据多年,将所有投注历史记录嵌入用户文档中可能会有问题 - 每次加载文档时是否需要所有历史记录?或者大部分都是无用的而且不相关?
我建议您考虑将所需的数据“一起”存储在一起,但对于您是否总是需要所有这些数据,要切合实际并且至关重要。