【发布时间】:2013-11-04 08:26:55
【问题描述】:
我是 mongodb 新手,请建议我如何针对以下情况更正设计模式:
我有用户集合和产品集合。产品包含 id、标题、描述、价格等信息...用户可以收藏或喜欢产品。目前,在用户集合中,我为喜欢的产品存储 1 个数组,为书签产品存储 1 个数组。因此,当我需要查看有关 1 个用户的信息时,我必须读出这 2 个数组,然后在产品集合中搜索以获取喜欢和收藏的产品的标题。
//User collection
{
_id : 12345,
name: "John",
liked: [123, 456, 789],
bkmark: [123, 125]
}
//Product collection
{
_id : 123,
title: "computer",
desc: "awesome computer",
price: 12
}
现在我想我可以通过在用户集合中嵌入产品 id 和标题来加快这个过程,这样我就不必在产品集合中搜索,只需读出并显示。但是如果我选择这种方式,每当产品的标题更新时,我也必须在用户集合中搜索和更新。我无法以第二种方式评估更新成本,所以我不知道哪种方式是正确的。请帮我在它们之间做出选择。
感谢和问候。
【问题讨论】:
-
根据您的用例,您还可以考虑将其翻转并将喜欢或收藏特定产品的用户 ID 添加到产品中。
-
谢谢,但我认为这不是一个好主意。因为有一段时间很多用户尝试喜欢 1 个产品,然后可能会发生一些奇怪的事情,我不确定如何处理 mongodb 中的竞争条件。
-
这个问题在 StackOverflow 上被问了很多,并且在 MongoDb 的网站上有很好的记录:docs.mongodb.org/manual/core/data-modeling。您需要根据测试找出在您的系统上有效的方法。
标签: mongodb design-patterns database-design