2012-08-04 53 views
1

我正在嘗試通過簡單的SQL來完成一些操作(例如,在同一個表中使用外鍵)(對MongoDB來說,這可能很簡單,我現在還不知道)這是建立一個遞歸數據結構。如何使用MongoDB構建遞歸結構

在這個例子中,我將討論網站中的頁面。我想製作一個多層次的頁面結構。因此,有可能是:

  • 首頁
  • 我們的產品
    • 產品1
    • 產品2
  • 關於我們
    • 我們在哪裏?
    • 聯繫我們

比方說,網頁將有一個標題和內容。

我需要知道什麼是最好的方式來做到這一點,以及我如何基於該數據結構(顯示來自每個級別的每個頁面的頁面)構建站點地圖。

我正在用MongoDB爲這種情況構建一個node.js應用程序。

編輯:它不會通過簡單引用每頁中的父頁面工作?頁面會像{ title: 'test', content: 'hello world', parentPage: ObjectID(parent page) }

感謝您的幫助!

回答

1

您將需要知道您希望如何訪問您的數據。我最後一次使用樹結構我在Ruby中實現了this(我從各種來源獲得靈感),它存儲了一個_id路徑和完整的uri(段落化頁面標題),處理結構這個。

另一方面,您可以創建一個集合文檔(根)和嵌入式文檔(樹枝和樹葉)。處理起來更簡單,但查詢時必須獲取整棵樹,並且只有在知道其內容的深度時才能查詢內部文檔。

從我過去的經驗來看,支持樹型結構的所有工作都不值得(除非是要求),大多數用戶會根據標籤而不是固定類別創建鬆散結構。

+0

我在想標籤或一些其他類型的分類,但我還是想知道我怎麼會效仿水平呀?感謝您的答覆! – TomShreds 2012-08-04 12:50:09

3

個人而言,我會在這裏實現一個物化的路徑結構,它是使用前綴沒有區分大小寫regexs(這意味着它將使用索引),很容易更新和查詢,這樣的例子看起來像:

{_id: {}, path: 'about_us/where_are_we'} 

這也正如你所看到的,它允許搜索引擎友好的URL直接打在這棵樹上,給你最大的力量。這是格外的幫助系統有幫助的你喜歡的地方顯示一個URL,如:

/help/how-to-use-my-site 

由於how-to-use-my-site可以在路徑上直接打甚至futher可以容納兩個領域,並直接上樣全文擊:

{_id: {}, path: 'about_us/where_are_we', normalised_url: 'where_are_we'} 

當然,前面的回答說你必須知道你希望如何訪問你的內容,但物化路徑在我看來是一個好的開始。

您可以在這裏蒙戈更多的樹結構:http://www.mongodb.org/display/DOCS/Trees+in+MongoDB