我正在爲我的網站開發一個模塊。類似於www.tastekid.commongodb數據庫設計(產品建議)
我的網站上有用戶和產品。
例如;第一個用戶喜歡2,4,56,57個產品(數字是產品的ID)。第二個(用戶)喜歡1,4,56,57個產品。
我應該能夠搜索誰喜歡56和57,看看這些用戶的常見產品ID是什麼?在這種情況下,它是4.然後1或2.
我該如何設計?引用還是嵌入?或者我不知道的任何其他solutoin ...
我希望這是清楚我的問題。 謝謝。
我正在爲我的網站開發一個模塊。類似於www.tastekid.commongodb數據庫設計(產品建議)
我的網站上有用戶和產品。
例如;第一個用戶喜歡2,4,56,57個產品(數字是產品的ID)。第二個(用戶)喜歡1,4,56,57個產品。
我應該能夠搜索誰喜歡56和57,看看這些用戶的常見產品ID是什麼?在這種情況下,它是4.然後1或2.
我該如何設計?引用還是嵌入?或者我不知道的任何其他solutoin ...
我希望這是清楚我的問題。 謝謝。
在架構設計蒙戈文檔應爲您提供一個良好的起點: 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」數組中。
希望這會給你一些想法來考慮你的應用程序。如果您有任何其他問題,社區在這裏幫助!
非常感謝Marc! – serkan 2012-04-11 11:35:13