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

时间:2017-06-22 14:14:31

标签: neo4j cypher

在数据库中,我有一个标签x.OutputFormat = SautinSoft.ExcelToPdf.eOutputFormat.Docx; x.ConvertFile(@"‪‪‪C:\Users\Khaled\Desktop\Bin\a.xlsx",@"C:\Users\Khaled\Desktop\Bin\a.doc"); ,其中包含属性为Person的节点。

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

firstname, gender, lastname, id

我要做的是创建id sibling 1 3,4,5 列与id列中的值之间的关系。

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

sibling

但是这种方法创建了仅具有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

它只返回以前在数据库中的节点(包含id,firstname,gender,lastname和id属性),没有新创建的关系,但是当我尝试返回具有关系的节点时,例如: / p>

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

返回新创建的MATCH (p:Person)-[SIBLING_OF]-(k:Person) WHERE p.id='123 RETURN p,k 节点,该节点仅具有k属性。

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

1 个答案:

答案 0 :(得分:1)

我希望您的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)