2011-01-05 40 views
5

我對MongoDB和NoSQL相當陌生。我有一個收集主題,每個主題可以有很多評論。每個評論都會有元數據,而不會使評論集合有用。MongoDB:你還應該提供鏈接到其他集合的ID還是隻包含集合?

在MySQL中我會使用外鍵鏈接到的意見表,但在NoSQL的我應該只是包括主題集合中的一個集合的評論或有它是在一個單獨的收集和鏈接通過IDS?

謝謝! 馬特

+0

的可能重複的[對對象的MongoDB關係](http://stackoverflow.com/questions/4253496/mongodb-relationships-for-objects) – 2011-01-05 05:12:13

回答

8

這取決於。

這取決於您期望擁有的每種類型的對象的數量。您是否可以將它們全部整合到一個給定主題的單個MongoDB文檔中?可能不會。

這取決於關係 - 你有一對多或多對多的關係嗎?如果它是一對多的,並且相關實體的數量很少,則可以選擇將它們嵌入文檔中的IList中。如果它是多對多的,你可能會選擇使用更傳統的關係,或者你可能選擇將雙方嵌入爲IList。

你可以在MongoDB中仍然模型的關係有獨立的集合但在數據庫中沒有連接,所以你需要做的是,在代碼。從性能的角度來看,加載主題然後加載評論可能會很好。

其他提示:

用MongoDB的,你都可以索引上的文檔數組。因此,不要將索引視爲僅僅是文檔簡單字段上的索引(如SQL)。您可以在主題上使用標籤集合,並將其索引到標籤中。 (見http://www.mongodb.org/display/DOCS/Indexes#Indexes-Arrays

當您檢索或寫入數據,你可以做一個部分讀取和任何文件的部分寫。 (請參閱http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields

最後,當您無法看到如何使用集合和索引獲取所需內容時,可以使用map reduce實現它。例如,要查找當前正在使用的所有標籤,並按照其使用頻率排序,可以將每個Topic映射爲發佈其中使用的標籤,然後減少該標籤以獲得您想要的結果。然後,您可能會永久存儲該地圖縮放的結果,並且只在需要時才更新它。

這是從關係的思維相當顯著的思維轉變但它是值得的,如果你需要一個NOSQL方法帶來的可擴展性和靈活性。

相關問題