首页 文章

Neo4j Cypher使用case语句来决定关系函数错误

提问于
浏览
1

我对graph / neo4j / cypher相当新,并且我的csv导入对节点运行良好,但是为了构建关系,我想通过使用case语句来决定我的关系语句,使其更加动态,但它错误地带有:

输入'S'无效:预期'l / L'(第2行,第3列(偏移:60))“CASE line.type”

是否可以使用此格式的CASE或我的语法错误?

CSV文件:

id,type,rack,name_from,port,name_to
1,fDEVICE,R01-01,ID_DEV_001,PX-01-0-F,R01-01-F-U01-1-A-01
2,fDEVICE,R01-01,ID_DEV_001,PX-01-1-F,R01-01-F-U02-1-A-01
3,fDEVICE,R01-01,ID_DEV_001,PX-03-0-F,R01-01-F-U01-1-A-02
4,fDEVICE,R01-01,ID_DEV_001,PX-03-1-F,R01-01-F-U02-1-A-02
5,FRAME,,R02-01-F-U01-1-A-01,,R02-01-F-U13-1-A-01
6,FRAME,,R02-12-F-U01-1-A-01,,R02-12-F-U24-1-A-01
7,FRAME,,R02-01-F-U01-1-A-02,,R02-01-F-U14-1-A-01
8,FRAME,,R02-12-F-U01-1-A-02,,R02-12-F-U23-1-A-01
9,tDEVICE,R03-01,ID_DEV_002,gi0-01,R03-01-F-U01-1-A-01
10,tDEVICE,R03-12,ID_DEV_003,gi0-01,R03-12-F-U02-1-A-01
11,tDEVICE,R03-02,ID_DEV_004,gi0-01,R03-02-F-U01-1-A-01
12,tDEVICE,R03-11,ID_DEV_005,gi0-01,R03-11-F-U02-1-A-01

暗号:

LOAD CSV WITH HEADERS FROM 'file:///patching.csv' AS line
CASE line.type
    WHEN 'fDEVICE' THEN
        MATCH (deviceport:DevicePort { name: line.port, device: line.name_from }),(port:Port { name: line.name_to})
        CREATE (port)-[:PATCHED]->(deviceport)
    WHEN 'FRAME' THEN
        MATCH (portA:Port { name: line.name_from}),(portB:Port { name: line.name_to})
        CREATE (portA)-[:PATCHED]->(portB)
    WHEN 'tDEVICE' THEN
        MATCH (deviceport:DevicePort { name: line.port, device: line.name_from }),(port:Port { name: line.name_to})
        CREATE (port)<-[:PATCHED]-(deviceport)
END

1 回答

  • 0

    我可能会把它分成3个简单的语句,每个语句都由 line.type 过滤 .

    像这样:

    LOAD CSV WITH HEADERS FROM 'file:///patching.csv' AS line
    WHERE line.type='fDEVICE'
    MATCH (deviceport:DevicePort { name: line.port, device: line.name_from }),(port:Port { name: line.name_to})
    CREATE (port)-[:PATCHED]->(deviceport);
    

    等等

    目前cypher中没有部分语句/子查询的条件 .

    您可以为每个条件使用(非)空FOREACH循环,但只支持更新语句,因此没有 MATCH .

相关问题