【问题标题】:Creating relationships of nodes of the same kind in Neo4j Cypher在 Neo4j Cypher 中创建同类节点的关系
【发布时间】:2020-02-29 14:06:25
【问题描述】:

这是我正在使用的数据框的一部分:

A_PERSON, B_PERSON, MESSAGE_TIME
SARAH, RON, 13:20 pm
RON, TIM, 13:33 pm
TIM, MARTHA, 13:45 pm
RON, LARRY, 13:35 pm
LARRY, JIM, 13:38 pm

我想创建一个图表来显示这些人之间发送的所有消息,并且箭头应该显示消息的时间。

我尝试过这样的事情:

load csv with headers 
from "file:\\df.csv" as row 
create(m: Message {a_person: row.A_PERSON, b_person: row.B_PERSON, time: row.MESSAGE_TIME})

以便以后我可以匹配它们,但似乎不可能。由于第二个和第三个标签,结果中有一些 A_PERSON 重复项。所以我不明白如何创建唯一节点并将它们相互连接。 有可能吗?如果是,那怎么办?

【问题讨论】:

    标签: dataframe graph neo4j cypher


    【解决方案1】:

    关键是使用MERGE 子句。 MERGE每个人然后MERGE两个人的关系。

    MERGE 将创建该人,如果他们不存在或MATCH 他们如果他们存在。

    LOAD CSV WITH HEADERS 
    FROM "file:\\df.csv" AS row 
    MERGE (a_person:Person {name: row.A_PERSON})
    MERGE (b_person:Person {name: row.B_PERSON})
    MERGE (a_person)-[:SENT_MESSAGE {time: row.MESSAGE_TIME}]->(b_person)
    

    或者,如果你将消息作为一个节点,你可以做这样的事情。

    LOAD CSV WITH HEADERS 
    FROM "file:\\df.csv" AS row 
    MERGE (a_person:Person {name: row.A_PERSON})
    MERGE (b_person:Person {name: row.B_PERSON})
    MERGE (a_person)-[:SENT_MESSAGE]->(:Message {time: row.MESSAGE_TIME})-[:TO]->(b_person)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多