我计划为我的网站开发一个模块。类似于www.tastekid.com
我的网站上有用户和产品。
例如,第一个用户喜欢2、4、56、57个产品(数字是产品的ID)。第二个(用户)喜欢1,4,56,57个产品。
我应该能够搜索谁喜欢56和57两者,并看到什么是这些用户的共同产品ID?在这种情况下是4。然后是1或2。
我怎么设计这个?引用还是嵌入?或者其他我不知道的解决办法…
我希望我的问题解决了。
谢谢。

最佳答案

关于模式设计的mongo文档应该为您提供一个良好的起点:
http://www.mongodb.org/display/DOCS/Schema+Design
这里有一个关于嵌入和链接的部分,以及一个示例,其中包含了两者的实现。
下面是另一个关于嵌入与链接的堆栈溢出问题,其中包含一个非常详细的答案:
MongoDB relationships: embed or reference?
名为“更新Mongo中的数据”的Mongo文档还包含有关嵌入文档和引用文档的部分:
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 ] }
>

有关$all运算符的更多信息,请参见“高级查询”文档:
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24all
然后,应用程序可以确定两个用户的“likesProducts”数组中出现的其他产品(如果有)。
希望这能为你的申请提供一些建议。如果你有任何其他问题,社区是来帮助!

关于mongodb - mongodb数据库设计(产品建议),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10075254/

10-16 17:56