在MongoDB中存储关系数据(NoSQL)

时间:2015-11-16 16:17:05

标签: sql mongodb database

我一直试图了解NoSQL,我确实看到了在文档中嵌入数据的好处。

我无法理解,并希望有人能够清理,如果必须是关系的,那么如何存储数据。

例如。

我有很多用户。他们都在购买产品。因此,每次他们购买产品时,我们都会在mongo的用户文档下添加它,因此它的内嵌功能非常棒。

我遇到的问题是当该产品的某些内容发生变化时。

让我们说用户A购买了一辆名为“保时捷”的汽车。然后,我们在用户配置文件下添加对该引用的引用。然而,在一系列奇怪的事件中,保时捷被法拉利收购。

你现在做什么,更新每一条记录并更改为保时捷到法拉利的名字?

通常在SQL中,我们会创建3个表。一个用户,一个用于汽车(描述,型号等)和一个用于将用户映射到购买。

你对Mongo做同样的事吗?看起来如果沿着这条路走下去,你就是想让Mongo以SQL方式做事,这不是它的目的。

我可以理解某些数据如何适合嵌入(地址,联系方式,注释等),但是当您需要引用可以并且需要定期更改的数据时会发生什么?

我希望这个问题很清楚

2 个答案:

答案 0 :(得分:2)

DBRefs / Manual参考专门用于解决此问题。您可以存储对另一个集合的引用,而不是手动将数据添加到每个文档,然后需要在更改时更新。这是mongoDB文档的详细信息。

References in Mongo

然后,您需要做的就是更新参考集合,更改将反映在所有下游位置。

答案 1 :(得分:0)

当我将mongoose库用于节点js时,它实际上创建了3个表,类似于您在SQL中的操作方式,您可以将对象id用作外键并在客户端或后端丰富它们,但仍然没有加入,但您可以对ID进行“输入”查询,然后以这种方式丰富对象,猫鼬可以通过“填充”自动完成此操作