MongoDB数据库设计(产品建议)

3
我打算为我的网站开发一个模块。类似于www.tastekid.com 我的网站上有用户和产品。
例如:第一个用户喜欢2、4、56、57个产品(数字是产品的ID)。第二个用户喜欢1、4、56、57个产品。
我应该能够搜索喜欢56和57的用户,并查看这些用户共同喜欢的产品ID是什么?在这种情况下,它是4。然后是1或2。
我该如何设计这个模块?引用还是嵌入?或者其他我不知道的解决方案...
希望我的问题已经清楚了。谢谢。
1个回答

3
MongoDB的模式设计文档可以为您提供良好的起点:http://www.mongodb.org/display/DOCS/Schema+Design。其中有一个关于嵌入和链接的部分,以及一个包含两者实现的示例。
以下是Stack Overflow上关于嵌入与链接的另一个问题,包含了非常详细的答案:MongoDB relationships: embed or reference? MongoDB的“更新数据”文档还包含有关嵌入文档和引用文档的部分:http://www.mongodb.org/display/DOCS/Updating+Data+in+Mongo 以上链接应该能很好地理解嵌入和引用文档之间的区别,并为您的模式设计提供一些好的想法。
针对您的具体例子,看起来您正在寻找喜欢相同产品的用户。一种可能的解决方案是在每个用户中包含一个喜欢的产品ID数组。
> db.users.find()
db.users.save({ "_id" : 1, "name" : "Joe", "LikesProducts":[2,4,56,57] });
db.users.save({ "_id" : 2, "name" : "Jane", "LikesProducts":[1,4,56,57] });

为了查找喜欢产品56和57的用户,您可以运行以下查询:

要找出喜欢产品56和57的用户,您可以运行以下查询:

> db.users.find({LikesProducts:{$all:[56,57]}})
{ "_id" : 1, "name" : "Joe", "LikesProducts" : [ 2, 4, 56, 57 ] }
{ "_id" : 2, "name" : "Jane", "LikesProducts" : [ 1, 4, 56, 57 ] }
> 

更多关于$all操作符的信息可以在“高级查询”文档中找到: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24all 然后,您的应用程序可以确定哪些其他产品(如果有)同时出现在两个用户的“LikesProducts”数组中。
希望这能为您的应用程序提供一些考虑的思路。如果您有任何其他问题,社区将会提供帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接