【问题标题】:Neo4j syntax for WITH statementWITH 语句的 Neo4j 语法
【发布时间】:2019-01-23 13:28:17
【问题描述】:

我正在尝试自动生成一个文本文件,可以运行该文件来为 Neoj4 Graph 创建节点和关系。

文本文件被创建在两个部分:

首先在 For 循环中创建节点(6000 个节点),结果如下:

create(SystemLogic_d6:FB {type:"SUB_DINT", instanceName:"d6", section:"SystemLogic"})
create(SystemLogic_d5:FB {type:"SUB_DINT", instanceName:"d5", section:"SystemLogic"})
create(SystemLogic_d7:FB {type:"ADD_DINT", instanceName:"d7", section:"SystemLogic"})
create(SystemLogic_d8:FB {type:"SEL", instanceName:"d8", section:"SystemLogic"})

然后在文本文件的下一部分中,在另一个 For 循环中创建关系,结果如下:

MATCH (SystemLogic_d8:FB), (SystemLogic_d12:FB) WHERE SystemLogic_d8.instanceName = "d8" AND SystemLogic_d12.instanceName = "d12" CREATE (SystemLogic_d8)-[: c]->(SystemLogic_d12) 
MATCH (SystemLogic_d17:FB), (SystemLogic_d18:FB) WHERE SystemLogic_d17.instanceName = "d17" AND SystemLogic_d18.instanceName = "d18" CREATE (SystemLogic_d17)-[: c]->(SystemLogic_d18) 
MATCH (SystemLogic_d16:FB), (SystemLogic_d17:FB) WHERE SystemLogic_d16.instanceName = "d16" AND SystemLogic_d17.instanceName = "d17" CREATE (SystemLogic_d16)-[: c]->(SystemLogic_d17) 
MATCH (SystemLogic_d11:FB), (SystemLogic_d5:FB) WHERE SystemLogic_d11.instanceName = "d11" AND SystemLogic_d5.instanceName = "d5" CREATE (SystemLogic_d11)-[: c]->(SystemLogic_d5) 

这给出了错误WITH is required between CREATE and MATCH

我尝试在此答案中插入 WITH

Neo4j Cypher WITH is required between CREATE and MATCH:

结果如下:

MATCH (SystemLogic_d8:FB), (SystemLogic_d12:FB) WITH SystemLogic_d8,SystemLogic_d12 WHERE SystemLogic_d8.instanceName = "d8" AND SystemLogic_d12.instanceName = "d12" CREATE (SystemLogic_d8)-[: c]->(SystemLogic_d12)
MATCH (SystemLogic_d17:FB), (SystemLogic_d18:FB) WITH SystemLogic_d17,SystemLogic_d18 WHERE SystemLogic_d17.instanceName = "d17" AND SystemLogic_d18.instanceName = "d18" CREATE (SystemLogic_d17)-[: c]->(SystemLogic_d18)
MATCH (SystemLogic_d16:FB), (SystemLogic_d17:FB) WITH SystemLogic_d16,SystemLogic_d17 WHERE SystemLogic_d16.instanceName = "d16" AND SystemLogic_d17.instanceName = "d17" CREATE (SystemLogic_d16)-[: c]->(SystemLogic_d17)
MATCH (SystemLogic_d11:FB), (SystemLogic_d5:FB) WITH SystemLogic_d11,SystemLogic_d5 WHERE SystemLogic_d11.instanceName = "d11" AND SystemLogic_d5.instanceName = "d5" CREATE (SystemLogic_d11)-[: c]->(SystemLogic_d5)
MATCH (SystemLogic_FBI_1407:FB), (SystemLogic_FBI_1408:FB) WITH SystemLogic_FBI_1407,SystemLogic_FBI_1408 WHERE SystemLogic_FBI_1407.instanceName = "FBI_1407" AND SystemLogic_FBI_1408.instanceName = "FBI_1408" CREATE (SystemLogic_FBI_1407)-[: c]->(SystemLogic_FBI_1408)

但我仍然遇到同样的错误

我也尝试将 WITH 语句放在 create 语句之后,但这会产生另一个错误。

您能否以这种方式导入和运行多个节点/关系创建语句?

它可以很好地创建节点,但我是使用 Neo4J / Cypher 的新手,我不确定是我的语法不正确还是你不能在这个 fasion 中创建多个关系。

感谢您的帮助

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    您需要用分号分隔语句,请参考以下查询:

    create(SystemLogic_d8:FB {type:"SEL", instanceName:"d8", section:"SystemLogic"});
    create(SystemLogic_d9:FB {type:"SEL", instanceName:"d8", section:"SystemLogic"});
    
    MATCH (SystemLogic_d2:FB), (SystemLogic_d21:FB) WHERE SystemLogic_d2.instanceName = "d8" AND SystemLogic_d21.instanceName = "d12" CREATE (SystemLogic_d2)-[: c]->(SystemLogic_d21);
    MATCH (SystemLogic_d1:FB), (SystemLogic_d12:FB) WHERE SystemLogic_d1.instanceName = "d8" AND SystemLogic_d12.instanceName = "d12" CREATE (SystemLogic_d1)-[: c]->(SystemLogic_d12)
    

    如果您只有 CREATE 语句,则无需使用分号,它会起作用,

    但如果您使用 MATCH 和 CREATE 组合,则需要用 分号 分隔语句。

    【讨论】:

    • 我可以在那里看到我的问题,谢谢 Raj!
    【解决方案2】:

    @Raj 答案有效。但是,由于您已经在 create 语句中捕获节点,因此无需对它们执行匹配即可创建关系。

    您的文件可能是:

    create(SystemLogic_d6:FB {type:"SUB_DINT", instanceName:"d6", section:"SystemLogic"})
    create(SystemLogic_d5:FB {type:"SUB_DINT", instanceName:"d5", section:"SystemLogic"})
    create(SystemLogic_d7:FB {type:"ADD_DINT", instanceName:"d7", section:"SystemLogic"})
    create(SystemLogic_d8:FB {type:"SEL", instanceName:"d8", section:"SystemLogic"})
    CREATE (SystemLogic_d8)-[:c]->(SystemLogic_d6) 
    CREATE (SystemLogic_d7)-[:c]->(SystemLogic_d6) 
    CREATE (SystemLogic_d8)-[:c]->(SystemLogic_d5) 
    

    【讨论】:

    • 哦,我明白了。你是对的,我没有检查关系是如何创建的。我刚刚检查了语法。
    猜你喜欢
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多