我在 Neo4j 中使用 Cypher 进行
LOAD CSV
操作期间偶然发现了以下用于设置标签的语法。它有效,但我不明白为什么,并且以下所有修改都会破坏它:
YIELD
语句YIELD node
语句中的YIELD node2
更改为YIELD
或任何其他名称WITH n,row
语句之间重复的 YIELD
语句UNION
(至少,我无法让它工作)有人可以启发我吗?我是 Cypher 和 APOC 的新手,我很想了解如何正确地重复进行 APOC 调用。
LOAD CSV WITH HEADERS FROM 'file:///myfile.csv' AS row
MERGE (n:Person{id:row.ID,name:row.Name})
WITH n,row
CALL apoc.create.addLabels(id(n), [row.Title,row.Position] YIELD node
WITH n,row
CALL apoc.create.addLabels(id(n), split(row.Roles, ',')) YIELD node
WITH n,row
CALL apoc.create.addLabels(id(n), split(row.Aliases, ',')) YIELD node
以下是您具体问题的答案:
当您
CALL
一个可以返回结果的过程时,通常还必须为过程的至少一个结果字段指定 YIELD
并使用准确的字段名称。您可以使用 SHOW PROCEDURES 来获取过程的签名,其中包括其结果字段。例如,获取apoc.create.addLabels
的签名:
SHOW PROCEDURES YIELD name, signature
WHERE name = 'apoc.create.addLabels'
RETURN signature
YIELD
必须指定过程签名中使用的结果字段名称。您不能使用任意名称,但您可以立即使用 AS
重命名字段(例如 YIELD officalName AS foo
)。
除其他外,WITH更改范围内的变量集。如果任何后续子句需要变量,则
WITH
子句必须指定该变量。
如文档所述,UNION“将两个或多个查询的结果组合成一个结果集”。您不能只将
UNION
放在任意子句之间。