定义集合(因此,描述存在哪些类别和子类别的集合)的结构应如下所示:
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->name 缓存,以便在不查询数据库的情况下进行类别查找。
问题?评论