2012-04-09 237 views
3

我正在为我的网站开发一个模块。类似于www.tastekid.commongodb数据库设计(产品建议)

我的网站上有用户和产品。

例如;第一个用户喜欢2,4,56,57个产品(数字是产品的ID)。第二个(用户)喜欢1,4,56,57个产品。

我应该能够搜索谁喜欢56和57,看看这些用户的常见产品ID是什么?在这种情况下,它是4.然后1或2.

我该如何设计?引用还是嵌入?或者我不知道的任何其他solutoin ...

我希望这是清楚我的问题。 谢谢。

回答

3

在架构设计蒙戈文档应为您提供一个良好的起点: http://www.mongodb.org/display/DOCS/Schema+Design 有上嵌入和链接,以及一个例子,它同时包含实施中的一个部分。

这里是另一个问题上堆栈溢出问上嵌入与链接的主题,包含了非常详细的解答: MongoDB relationships: embed or reference?

蒙戈文档标题为,“在蒙戈更新数据”还包含嵌入文档章节和参考文件: 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一样,可以运行下面的查询:

> 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 ] } 
> 

在$所有操作员可以进入“高级查询”文档中找到更多信息: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24all

然后,您的应用程序可以确定哪些其他产品(如果有)出现在两个用户的“LikesProducts”数组中。

希望这会给你一些想法来考虑你的应用程序。如果您有任何其他问题,社区在这里帮助!

+0

非常感谢Marc! – serkan 2012-04-11 11:35:13