2012-04-09 105 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