# 行转列
## 问题：大文档，很多字段，很多索引

```json
{
    title: "Dunkirk",
    ...
    release_USA: "2017/07/23",
    release_UK: "2017/08/01",
    release_France: "2017/08/01",
    release_Festival_San_Jose:
    "2017/07/22"
}

# 需要很多索引
{ release_USA: 1 }
{ release_UK: 1 }
{ release_France: 1 }
...
{ release_Festival_San_Jose: 1 }
```

## 解决方案：列转行

```json
{
    title: "Dunkirk",
    ...
    release_USA: "2017/07/23",
    release_UK: "2017/08/01",
    release_France: "2017/08/01",
    release_Festival_San_Jose:
    "2017/07/22"
}
=>
{
    title: "Dunkirk",
    ...
    releases: [
        { country: “USA”, date:”2017/07/23”},
        { country: “UK”, date:”2017/08/01”}
    ]
}

db.movies.createIndex({"releases.country": 1, "releases.date": 1})
```

## 模式小结：列转行

| 场景                                                         | 痛点                                                         | 设计模式方案及优点                   |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------ |
| 产品属性 'color'，'size'，'dimensions'，...<br />多语言（多国家）属性 | 文档中有很多类似的字段<br />会用于组合查询搜索，需要建立很多索引 | 转化为数组，一个索引解决所有查询问题 |
