示例描述
属性模式运用到了 MongoDB 多键索引的概念,支持对数组中的嵌套子文档中的某个属性进行索引。
假设现在有一个关于电影的集合,其中文档中会包含标题、导演、制片人、演员、上映时间等等信息,对于跨地区上映的电影,有可能不同地区的上映时间是不一样的。
如下展示是一条电影的文档数据:
{ "title": "Star Wars", "director": "George Lucas", // 不同地区有不同的上映时间 "release_US": ISODate("1977-05-20T01:00:00+01:00"), "release_France": ISODate("1977-10-19T01:00:00+01:00"), "release_Italy": ISODate("1977-10-20T01:00:00+01:00"), "release_UK": ISODate("1977-12-27T01:00:00+01:00"), }
为了支持对所有上映时间做一个快速搜索,也许我们需要将所有的上映时间设置为单一索引,这个时候,索引的数量就会变得显而易见的多。
使用属性模式,我们通过将这些上映时间信息移动到一个数组中,然后再对这个数组建立一个多键索引索引,以实现使用一个索引替代多个类似索引的功能。
如下是修改结构后的文档数据:
{ "title": "Star Wars", "director": "George Lucas", // 所有的地区的上映时间都放在同一个属性内部 "releaseList": [ { "region": "US", "date": ISODate("1977-05-20T01:00:00+01:00") }, { "region": "France", "date": ISODate("1977-10-19T01:00:00+01:00") }, { "region": "Italy", "date": ISODate("1977-10-20T01:00:00+01:00") }, { "region": "UK", "date": ISODate("1977-12-27T01:00:00+01:00") } ] }
优缺点
属性模式的优点如下:
需要更少的索引
查询变得更容易编写,而且通常更快
0条评论
点击登录参与评论