牛叔叔 的笔记

好好学习

2023-01-31 12:27

属性模式--MongoDB数据模型设计模式

牛叔叔

数据库

(435)

(0)

收藏

示例描述

属性模式运用到了 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条评论

点击登录参与评论