2014-09-29 15 views
0

我來自SQL世界,所以自然mongo/noSQL一直是一個冒險。隨着meteor.js和mongo,請告訴我組織一個類別集合的最佳方式

我正在構建一個頁面來添加/編輯類別,稍後將分配「posts」。

我已經基本上建立是這樣的:

{ 
    _id: "asdf234ljsf", 
    title: "CategoryOne", 
    sortorder: 1, 
    active: true, 
    children: [ 
     { 
      title: ChildOne, 
      sortorder: 1, 
      active: true 
     }, 
     { 
      title: ChildTwo, 
      sortorder: 2, 
      active: true 
     } 
    ] 
} 

所以後來,開創了「帖子」我想這個職位分配給一個或多個父類,以及任選一種或多種類別的孩子時,在選定的父類別內。訪問者如果點擊父類別,則會顯示該父類別中的所有帖子,如果他們選擇了子類別,則只顯示該子類別中的帖子。

的邏輯是顯而易見的,簡單的,但在SQL我會創建的表是這樣的:

table_Category (CategoryID, Title, Sort, Active) 
table_Category_Children (ChildID, ParentID, Title, Sort, Active) 

我一直在閱讀流星發現書裏提到,流星給了我們許多工作的一個工具在集合級別運行時更好,以及DDP如何在文檔的頂層運行,這意味着如果子集合或陣列中的某些內容變小,可能不需要的數據將被髮送回所有連接/訂閱的客戶端。

所以,這讓我覺得我應該是組織的類別是這樣的:

Collection for parent categories 

{ 
    _id: "someid", 
    title: "CategoryOne" 
    sortorder: 1, 
    active: true 
}, 
{ 
    _id: "someid", 
    title: "CategoryTwo" 
    sortorder: 1, 
    active: true 
} 

Collection for Child Categories 

{ 
    _id: "someid", 
    parent: "idofparent" 
    title: "ChildOne" 
    sortorder: 1, 
    active: true 
}, 
{ 
    _id: "someid", 
    parent: "idofparent" 
    title: "ChildTwo" 
    sortorder: 1, 
    active: true 
} 

或者,也許它更是這樣的:

Collection for parent categories 

{ 
    _id: "someid", 
    title: "CategoryOne" 
    sortorder: 1, 
    active: true, 
    children: [ { id: "childid" }, ... ] 
} 

我想了解的最佳實踐/方法流星和蒙戈在這種情況下將大大幫助我全面。

所以結論:我有一個管理頁面添加/編輯這些類別。當客戶創建帖子時,他們會選擇適合其帖子的父類和子類,並確保從頭開始正確組織它。將我的思維過程從傳統的RDBMS改爲NoSQL是一大進步。

謝謝!

回答

0

MongoDB將所有數據存儲在文檔中。這與像SQL這樣的關係數據庫有根本的不同。

想象一下,如果您有100個父類別和1000個子類別,則一旦您更新父類別,它將以被動方式影響所有鏈接子類別的「idofparent」。總之,這是不可持續的。

嘗試想辦法避免在MongoDB中使用JOIN SQL等價物。 重組你的數據也許類似這樣:

一個大集合所有類別:

{ 
    _id: id, 
    title: title, 
    sortorder: 1, 
    active: 1, 
    class: "parent > child" // make this as a field 
    ... 
} 

// class can be "parent1", "parent2", "parent1 > child1" ... you get the idea 

所以每個文檔存儲完全是個人。 或者,如果您絕對需要JOIN關係數據結構,我不認爲MongoDB是您的正確選擇。

相關問題