Neo4j MERGE创建新节点,而不是使用现有节点



在数据库中,我有一个标签Person其中包含具有属性的节点:firstname, gender, lastname, id

我有一个包含关系信息的 CSV 文件,例如:

id  sibling
1   3,4,5

我试图做的是在idsibling列中的值之间创建关系。

我使用以下代码来执行此操作:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM
'file:///relationship.csv' AS line1
WITH line1, split(line1.sibling, ",") as siblings
UNWIND siblings as sibling
MERGE (p:Person{id:line1.id})
MERGE (k:Person{id:sibling})
MERGE (p)-[:SIBLING_OF]->(k)

但是此方法创建仅具有id属性的新节点,而不是连接数据库中已存在的节点。

奇怪的是当我使用此查询时:

MATCH (p:Person)
WHERE p.id='123'
RETURN p

它只返回以前在数据库中的节点(包含 id、名字、性别、姓氏和 id 属性(,没有新创建的关系,但是当我尝试返回具有关系的节点时,例如:

MATCH (p:Person)-[SIBLING_OF]-(k:Person)
WHERE p.id='123
RETURN p,k

新创建的k节点将返回仅具有id属性。

有谁知道我在查询中做错了什么?

我希望您的CSV文件中有一些空白区域,以防止密码与原始节点匹配。

确保对 :Person(id) 有约束或索引。

另外,您正在合并该用户的每个兄弟姐妹的id列,您可以将其向上移动并且只执行一次。

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:///relationship.csv' AS line1
MERGE (p:Person {id: trim(line1.id)})
WITH p, line1, split(line1.sibling, ",") as siblings
UNWIND siblings as sibling
MERGE (k:Person {id: trim(sibling)})
MERGE (p)-[:SIBLING_OF]->(k)

最新更新