

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 UNWIND 子句中使用扁平化映射而非嵌套映射
<a name="best-practices-content-3"></a>

 深层嵌套结构可能会限制查询引擎生成最佳查询计划的能力。为了部分缓解此问题，以下定义的模式将针对以下场景创建最佳计划：
+  场景 1：使用包含 NUMBER、STRING 和 BOOLEAN 的 Cypher 字面量列表的 UNWIND 子句。
+  场景 2：使用扁平化映射列表的 UNWIND 子句，其中仅包含 Cypher 字面量（NUMBER、STRING、BOOLEAN）作为值。

 在编写包含 UNWIND 子句的查询时，请遵循上述建议来提高性能。

场景 1 示例：

```
UNWIND $ids as x
MATCH(t:ticket {`~id`: x})
```

参数为：

```
parameters={
  "ids": [1, 2, 3]
}
```

 场景 2 的一个示例是生成要执行 CREATE 或 MERGE 操作的节点的列表。使用以下模式（而非发出多个语句）将属性定义为一组扁平化映射：

```
UNWIND $props as p
CREATE(t:ticket {title: p.title, severity:p.severity})
```

参数为：

```
parameters={
  "props": [
    {"title": "food poisoning", "severity": "2"},
    {"title": "Simone is in office", "severity": "3"}
  ]
}
```

而不是如下嵌套节点对象：

```
UNWIND $nodes as n
CREATE(t:ticket n.properties)
```

参数为：

```
parameters={
  "nodes": [
    {"id": "ticket1", "properties": {"title": "food poisoning", "severity": "2"}},
    {"id": "ticket2", "properties": {"title": "Simone is in office", "severity": "3"}}
  ]
}
```