使用 MongoDB 的数据模型的困境

Dilemma with the data model using MongoDB

我正在开发一个我们将拥有用户和视频的应用程序。

是n-n关系,一个用户可以关联多个视频,同一个视频也可以关联多个用户。

我决定在实现上使用 mongoDB,虽然我一开始并不熟悉这项技术,所以我 运行 遇到了一个关于文档数据模型的问题(与实体关系数据模型)。​​

在此应用程序中,我需要经常访问与特定用户有某种关联的视频。从这个角度来看,将文档 'video' 嵌入到文档 'user'.

中是合乎逻辑的

但是,我还需要经常访问视频集,而不管与它们相关的用户。从这个角度来看,如果将与视频相关的用户嵌入到其文档中,数据模型的设计似乎会更好。

两种设计都有意义,解决了一个问题,但让剩下的问题变得相当难解决;我将不得不执行复杂、低效的查询,才能真正获得这两种设计中的任何一种的两种功能。

现在我认为最好的决定是以与在关系数据库中相同的方式实现它(用户和视频有两个不同的文档,以及一个让我知道这两者之间关系的中间文档).

我真的不确定在mongoDB中应该如何解决这个问题,所以我想请教有关数据模型设计的建议。

提前致谢。

两者都做。

虽然在关系数据库中应该避免冗余,但对于面向文档的数据库则不然。当您没有 JOIN 时,您需要确保每个常见查询都可以使用来自单个集合的文档来完成。冗余通常是实现此目的的唯一方法。

缺点是您现在需要两个查询来更新关系,因为 videouser 文档都需要更新。但这是一个很小的代价,特别是考虑到更新通常不像读取那样对性能至关重要(您可以在后台执行它们,同时在前端为请求更新的用户伪造结果)。