【问题标题】:In Neo4j, is there a way to read relationship name dynamically using loadcsv?在 Neo4j 中,有没有办法使用 loadcsv 动态读取关系名称?
【发布时间】:2015-03-29 16:14:45
【问题描述】:

我已经使用 Cypher 使用 LOAD CSV 方法创建了节点。下一部分是创建与节点的关系。为此,我有以下格式的 CSV

fromStopName,from,route,toStopName,to
Swargate,1,route1_1,Swargate Corner,2
Swargate Corner,2,route1_1,Hirabaug,3
Hirabaug,3,route1_1,Maruti,4
Maruti,4,route1_1,Mandai,5

现在我想将“路由”名称作为节点之间的关系。所以,我在 CYPHER 中使用以下 LOAD CSV 命令

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:C:\\\\busroutes.csv" AS row
MATCH(f {name:row.fromStopName}),(t {name:row.toStopName}) CREATE f - [:row.route]->t

但看起来,我不能那样做。相反,如果我静态命名关系,然后从 csv 路由字段分配属性,它会起作用。

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:C:\\\\busroutes.csv" AS row
MATCH(f {name:row.fromStopName}),(t {name:row.toStopName}) CREATE f - [:CONNECTS {route: row.route}]->t

我想知道这是否被禁用以强制执行具有“纯”动词类型关系并避免创建相同关系的多重性的良好做法。比如“由 1_1 连接”“由 1_2 连接”。

或者我只是没有找到正确的链接或没有使用正确的语法。感谢帮助!

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    现在你不能,因为这是结构信息。

    • 要么使用neo4j-import tool
    • 或者每种类型使用一个 CSV 文件并拼出 rel 类型。
    • 甚至过滤 CSV 并执行多遍:

    例如

    USING PERIODIC COMMIT
    LOAD CSV WITH HEADERS FROM "file:C:\\\\busroutes.csv" AS row
    with row where row.route = "route1_1"
    MATCH(f {name:row.fromStopName}),(t {name:row.toStopName}) 
    CREATE (f)-[:route1_1]->(t)
    

    还有一个使用假条件句的技巧,但你仍然必须把它们拼出来。

    【讨论】:

    • 还是一样吗?根本没有支持动态关系名称的增强功能?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多