我是MongoDB的新手,我正在尝试学习NoSQL风格的数据库并想知道,我如何在MongoDB命令行中编写多对多关系。例如,餐馆可以从一个或多个用户接收评论,并且这些用户中的每一个可以评论一个或多个餐馆。
餐厅:评论ID,用户ID,评论
用户:评论ID,餐厅ID,评论
我们会使用唯一ID进行编码吗?
如果您的系统假设使用不同类型的关系(连接)执行查询,我建议重新设计它并转向相关数据库。
对于Mongo,您必须手动管理关系。你可以使用DBRef。但我强烈建议避免它们。在许多框架中(例如 - Spring Data),DBRefs可能会导致非最佳子查询(它会在结果集中的每个DBRef的循环中执行单个子查询)。
在您的情况下,我建议在每个实体中存储相关主键 - ID列表,并按照您自己的IF需要通过列表实现查询。
对于NoSQL,要注意的主要是你希望如何查询这些数据。您希望尽可能避免关系,并且通常希望将数据封装在单个文档中。多对多关系通常最终会被非规范化,而A
有B
关系通常最终将B
作为A
内的财产。
看看你的评论< - >餐馆的例子,你可以在comments
集合上有一个restaurants
数组,你可以在添加新评论时加入这个数组。假设没有餐厅有太多评论(这绝对可以解决!),这将允许您在一个快速查询中获得所需的所有信息。
如果您还想按用户查找注释,则可能会对每个用户的注释进行反规范化,并将其存储在用户上,或者可能只存储该用户已评论过的餐馆的ID。
以这种方式存储数据肯定比使用传统的关系数据库做更多的工作并且不那么灵活,但它确实允许快速查询和体面可扩展的架构