|| apoc.cypher.doIt - APOC 核心文档 - Neo4j 文档

apoc.cypher.doIt

详情

语法

apoc.cypher.doIt(statement, params) :: (value)

描述

使用给定参数运行动态构建的语句。此过程允许读取和写入语句。

输入参数

名称

类型

描述

statement

STRING

要运行的 Cypher 语句。

params

MAP

给定 Cypher 语句的参数。

返回参数

名称

类型

描述

value

MAP

Cypher 语句返回的结果。

此过程无法执行模式操作。要在模式模式下运行查询,请使用 apoc.cypher.runSchema

在 Cypher 中使用动态标签

无需使用 APOC,即可在 Cypher 中动态引用节点标签和关系类型。

动态创建、匹配和合并标签和类型的 Cypher 语法
CREATE (n1:$(label))-[r:$(type)]->(n2:$(label))
MERGE (n1:$(label))-[r:$(type)]->(n2:$(label))
MATCH (n1:$(label))-[r:$(type)]->(n2:$(label))

动态计算的类型必须解析为 STRINGLIST<STRING>。更多信息请参见 Cypher 手册 → CREATEMERGEMATCH

使用示例

本节示例基于一个我们不小心创建了全大写节点标签的图,如下所示

CREATE (:PERSON)
CREATE (:EVENT)
CREATE (:TAG)
CREATE (:LOCATION);

我们希望将所有这些标签更新为只有首字母大写。我们可以使用 toLowerapoc.text.capitalize 函数来转换标签名称,如下面的查询所示

CALL db.labels()
YIELD label
RETURN apoc.text.capitalize(toLower(label)) AS value;
结果
value

"Event"

"Person"

"Tag"

"Location"

现在我们想设置新标签并删除旧标签。apoc.cypher.doIt 过程是动态设置和删除标签的一种方式,但也可以使用纯 Cypher 来完成。下面显示了等效查询

apoc.cypher.doIt
MATCH (node)
WITH node, labels(node)[0] AS label
CALL apoc.cypher.doIt(
  "WITH $node AS node
   REMOVE node:" + label + "\n" +
  "SET node:" + apoc.text.capitalize(toLower(label)) + "\n" +
  "RETURN node",
  {node: node})
YIELD value
RETURN value;
SET 和 REMOVE 子句
MATCH (node)
WITH node, labels(node)[0] AS label
REMOVE node:$(label)
SET node:$(apoc.text.capitalize(toLower(label)))
RETURN node AS value;
结果
value

{node: (:Person)}

{node: (:Event)}

{node: (:Tag)}

{node: (:Location)}

对于模式操作,需要使用 apoc.cypher.runSchema 过程。
© . This site is unofficial and not affiliated with Neo4j, Inc.