LOAD CSV
在使用 Cypher 在 Neo4j 中进行操作期间,我偶然发现了以下用于设置标签的语法。它有效,但我不明白为什么,并且以下所有修改都会破坏它:
- 删除任何
YIELD
语句 - 第 2 条和第 3 条语句中更改
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、WITH和UNION的文档。
以下是您的具体问题的答案:
当您创建
CALL
一个可以返回结果的过程时,通常还必须YIELD
为该过程的至少一个结果字段指定 并使用准确的字段名称。您可以使用SHOW PROCEDURES来获取过程的签名,其中包括其结果字段。例如,要获取 的签名apoc.create.addLabels
:YIELD
必须至少指定过程签名中使用的结果字段名称之一。尽管您可以立即使用AS
来重命名字段(例如,YIELD officalName AS foo
),但您不能使用任意名称。Cypher 不允许多个
YIELD
s 产生相同的变量名(在同一范围内)。为了解决这个问题,您可以使用AS
重命名这些变量。例如,这应该有效:(另外仅供参考:WITH更改范围内的变量集。如果任何后续子句需要变量,则子句
WITH
必须指定该变量。)如文档所述,UNION “将两个或多个查询的结果组合成一个结果集”。你不能只
UNION
在任意子句之间放置。