MongoDB Expenses集合车辆成本数据存储建模方案选型咨询
方案选择建议:优先选扁平化数组结构(方案2)
- 前端渲染成本更低:你当前需要用React渲染每行对应单个Item的表格,扁平化结构获取到后可以直接遍历渲染,不需要额外拆解嵌套的
items数组,后续如果要做单条数据的筛选、排序、修改Cost的交互,也不需要额外做数组拍平处理,代码逻辑更简洁不易出错。 - 数据库操作更简单:如果要修改单条Item的Cost,扁平化结构只需要直接定位单条文档更新即可,而嵌套结构需要操作数组内的指定元素,MongoDB的数组元素更新语法更复杂,出错概率更高。如果后续需要做数据统计,比如统计某类别的总成本、筛选高于指定成本的Item,扁平化结构的聚合查询逻辑也更简单,不需要额外加
$unwind步骤拆解嵌套数组,查询性能也更好。 - 扩展性更好:如果后续新增Category或者Item,只需要新增对应文档即可,不需要调整现有数据结构。
方案1的适用场景说明
如果你的业务逻辑是几乎不会操作单个Item,每次查询都需要拉取整个分类下的所有Item,那嵌套结构会更合适,但就你当前的场景来看,方案2的适配性更高。
其他可选方案说明
如果你的Category和Item是100%完全固定不会新增的,也可以考虑单文档结构,每个Category作为一个文档,下挂各个Item作为一级字段:
{ "category": "land", "car_cost": 1000, "motorbike_cost": 500 }
但这个方案扩展性极差,只要新增Item就需要改集合结构,整体收益远低于方案2,不推荐。
额外优化建议
可以给category和item字段加联合唯一索引,避免同一个分类下出现重复的Item,保证数据规范性。
内容的提问来源于stack exchange,提问作者Cedric
相关产品推荐
相关产品推荐

