如何在 Neo4j Cypher 中堆叠连续的 APOC 语句

问题描述 投票:0回答:1

我在 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
neo4j cypher neo4j-apoc
1个回答
0
投票

您应该阅读 CALLWITHUNION 的文档。

以下是您具体问题的答案:

  • 当您

    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
    放在任意子句之间。

© www.soinside.com 2019 - 2024. All rights reserved.