定義集合(所以,描述哪些類別和子類別的集合)應該如下構成:
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->名稱緩存,以便在不查詢數據庫的情況下進行類別查找。
有問題?評論
您是否已閱讀關於[MongoDB中的樹](http://www.mongodb.org/display/DOCS/Trees+in+MongoDB)的wiki信息?那裏有一些常見的模式示例。 – Stennie