2015-11-16 105 views
3

我一直在努力让自己的头部围绕NoSQL,并且看到将数据嵌入到文档中的好处。在MongoDB中存储关系数据(NoSQL)

我不明白,希望有人能清除,是如何存储数据,如果它必须是关系。

例如。

我有很多用户。他们都在购买产品。所以每次他们购买产品时,我们都会将它添加到mongo的用户文档中,因此它的嵌入性和全部功能都很棒。

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

假设用户A购买了名为“Porsche”的汽车。然后,我们在用户配置文件中添加一个引用。然而,在一场奇怪的比赛中,保时捷被法拉利收购。

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

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

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

我可以理解某些数据对于嵌入(地址,联系人详细信息,注释等)的好处,但是当您需要引用可以并需要定期更改的数据时会发生什么情况?

我希望这个问题是清楚的

+3

如果数据是关系数据,请将其存储在关系数据库中。 – David

回答

2

DBREFS /手册参考是专门为解决这个问题。除了手动将数据添加到每个文档,然后在更改某些内容时需要更新时,您可以将引用存储到另一个集合。有关详细信息,请参阅mongoDB文档。

References in Mongo

然后,所有你需要做的就是更新参考收集和变化将在所有下游位置得到体现。