2012-06-20 50 views
0

我在想如何在mongoDB中存儲一個類別和子類別列表供人們銷售物品。mongoDB - eBAY風格類別

這就是我要如何去做的,但是當我想到它時,它就不會工作。

這是爲什麼

{"category":"Fashion", 
"Sub-Categories": 
[{ 
    "subcat_name":"Female Clothing", 
    "Sub-categories":[{"subcat-name":"Dresses"},{"subcat-name":"Shirts"},{"subcat-name":"Business"}] 
}] 
} 

正如你可以看到有子類別的兩個級別,這意味着它可能會confussing更新。

有人能告訴我做的類別列表中的MongoDB像eBay和加姆特里

+0

您是否已閱讀關於[MongoDB中的樹](http://www.mongodb.org/display/DOCS/Trees+in+MongoDB)的wiki信息?那裏有一些常見的模式示例。 – Stennie

回答

0

定義集合(所以,描述哪些類別和子類別的集合)應該如下構成:

db.categories { 
_id: <Category ID, unique code or ObjectId>, 
name : <Human readable category name>, 
subCategories : [ 
    { 
     subCategoryCode : <Sub category ID, local unique code>, 
     name : <Human readable sub category name>, 
     <additional sub category data> 
    } 
], 
<additional category data> 
} 

而且你的項目:

db.items { 

_id : <Item id> 
name : <Human readable item name> 
category : { 
    categoryId : <Category ID>, 
    categoryName : <Human readable category name>, 
    subCategoryId : <Sub category ID>, 
    subCategoryName : <Human readable sub category name>, 
}, 
<additional item data> 
} 

運行該模式通過所有常見的用例,你會發現你在哪裏,你需要查詢兩個集合統一的共同操作的位置是非常罕見。數據重複是故意的,需要進行管理(這意味着如果更新類別名稱,則必須批量更新某個類別中的項目)。如果您因爲性能或實用性原因而無法實現該功能,則只能在應用程序中存儲名稱並維護應用程序本地ID->名稱緩存,以便在不查詢數據庫的情況下進行類別查找。

有問題?評論

+0

嗨,我有一個小問題,那就是,subCategoryId我該如何讓他們像一個ID ID – RussellHarrower

+0

那麼你可以簡單地生成一個ObjectId,但任何ID都可以工作,因爲它只需要在主類別中是唯一的。甚至可能是子類別名稱字符串的轉義小寫版本。 –

0

我建議你讓你的陣列像一個鏈表的最佳途徑,你必須有一個父類的列。

父類別列指向(顯然)父類別的索引,我想你明白了我的觀點。

現在你可以使用遞歸

這裏檢索這些信息是你的樣品陣列

index name    parent 
    1  fashion 
    2  female clothing  1 
    3  dresses    2 
    3  shirts    2 

所以通過這個,你可以創建一個動態類只有結構簡單

+0

對不起,你可以給一個簡單的示例 – RussellHarrower

+0

我不熟悉mongoDB的語法,但我希望這個想法可以讓你的某個地方 –