我打算为我的网站开发一个模块。类似于www.tastekid.com
我的网站上有用户和产品。
例如; 第一个用户喜欢 2,4,56,57 个产品(数字是产品的 id)。第二个(用户)点赞了 1,4,56,57 个产品。
我应该能够搜索谁喜欢 56 和 57,看看这些用户的常见产品 ID 是什么?在这种情况下,它是 4。然后是 1 或 2。
我该如何设计这个?引用还是嵌入?或任何其他我不知道的溶液...
我希望这能解决我的问题。谢谢。
我打算为我的网站开发一个模块。类似于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 有一个关于嵌入和链接的部分,以及一个示例,其中包含实现两者的。
这是 Stack Overflow 上关于嵌入与链接的另一个问题,其中包含一个非常详细的答案: MongoDB 关系:嵌入还是引用?
标题为“在 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”数组中。
希望这会给您一些想法来考虑您的应用程序。如果您有任何其他问题,社区随时为您提供帮助!