开发者社区> 问答> 正文

关于mongodb的建模

关于mongodb的建模,有人建议我 把 “商品”的“品牌名” 从ObjectId 转为 string,这样好吗?

展开
收起
蛮大人123 2016-02-19 11:20:54 1730 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    这个要具体业务具体分析了。
    如果把品牌名设置成 ObjectId 的话,就说明有另外一个 collection 存放着品牌。这么做是典型的关系型数据库的方式,对于 mongodb 来说,每次要获得商品的品牌名,就要多一次读操作。
    如果设置成 String ,一次操作即可取出全部商品信息和品牌名,但修改品牌的时候却非常麻烦,如果在一次请求中还要获得品牌的一些信息,比如品牌所在的国家,那么还是要再做一次查询,扩展性不够好。
    如果设置成 Object 比如:

    {

    item:"",
    price:100,
    brand:{
        name: "micorsoft",
        country: "US"
    }

    }
    这么做可以解决扩展性的问题,而且查询速度也很快,如果商品品牌信息不怎么更新的话,那么我建议这么做。虽然增加了数据冗余程度,但是提高了查询速度,这就是反范式。

    如果品牌信息经常更新的话,那么用 ObjectId 还是好的,虽然多了一次查询,但是提高了可靠性。

    2019-07-17 18:44:29
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Data as a Service - 数据即服务 -- MongoDB⾼级应⽤模式 立即下载
开源数据库 MongoDB 专场 MongoDB疑难杂症分析及优化 立即下载
饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的 立即下载