# 嵌套结构与扁平结构选择

URL: https://caijiao.org/mongodb/04-modeling/02-nested-vs-flat
Source: docs/mongodb/04-modeling/02-nested-vs-flat.md
Description: 本章节讲解 MongoDB 中嵌套结构与扁平结构的设计选择，帮助用户根据业务需求和性能权衡数据模型。

[MongoDB](/mongodb/) 支持灵活的文档结构设计，常见两种方式：嵌套结构和扁平结构。合理选择能提升数据访问效率和维护便利性。

## 嵌套结构

嵌套结构是将相关数据作为子文档或数组直接存储在主文档内，适合数据关系紧密且频繁联合访问的场景。

优点：

- 查询时减少关联操作，性能更优。
- 数据逻辑清晰，符合文档模型特点。
- 事务复杂度降低。

缺点：

- 文档可能过大，接近 16MB 限制时影响性能。
- 更新嵌套数据可能复杂。

示例：

```json
{
  "_id": 1,
  "name": "Alice",
  "address": {
    "city": "Beijing",
    "zip": "100000"
  }
}
````

## 扁平结构

扁平结构将数据拆分成多个独立文档，通过引用字段关联，适合数据关系复杂或数据共享场景。

优点：

- 文档大小较小，灵活扩展。
- 适合数据频繁更新的独立部分。
- 支持更复杂的关联关系。

缺点：

- 需要多次查询或聚合连接，影响性能。
- 维护数据一致性更复杂。

示例：

```json
// 用户文档
{
  "_id": 1,
  "name": "Alice",
  "address_id": 101
}
// 地址文档
{
  "_id": 101,
  "city": "Beijing",
  "zip": "100000"
}
```

## 选择建议

- 优先考虑嵌套结构，简化查询和事务。
- 当嵌套导致文档过大或数据独立时，采用扁平结构。
- 根据具体业务需求和访问模式权衡设计。

---

正确选择嵌套或扁平结构，有助于构建高效、可维护的 MongoDB 数据模型。
