通过Cypher

时间:2015-07-26 17:26:01

标签: neo4j cypher

我有一组带有重复数据的CSV文件,即同一行可能(并且确实)出现在多个文件中。每一行由其中一列(id)唯一标识,并且有相当多的其他列指示属性,以及所需的关系(即要链接到的其他节点的ID)。这些文件都具有相同的格式。

我的问题是,由于文件的大小和数量,我想避免处理已经存在的行 - 我知道只要id是相同的,行的内容将是相同的文件。

如果找不到具有给定id的节点,任何cypher向导是否可以建议如何编写将创建节点的查询,设置所有属性并创建所有关系,但如果找到此节点,则完全跳过该操作?我尝试使用MERGE ON CREATE,其中包括:

LOAD CSV WITH HEADERS FROM "..." AS row
MERGE (f:MyLabel {id:row.uniqueId})
ON CREATE SET f....
WITH f,row
MATCH (otherNode:OtherLabel {id : row.otherNodeId})
MERGE (f) -[:REL1] -> (otherNode)

但不幸的是,这只能用于不再设置属性,但我无法解决如何跳过关系的合并部分(这里只显示一个,但还有更多)。 / p>

提前致谢!

1 个答案:

答案 0 :(得分:3)

您可以选择性地匹配节点,然后跳过WHERE n IS NULL 确保您在:MyLabel(id)

上有索引或约束
LOAD CSV WITH HEADERS FROM "..." AS row
OPTIONAL MATCH (f:MyLabel {id:row.uniqueId})
WHERE f IS NULL
MERGE (f:MyLabel {id:row.uniqueId})
ON CREATE SET f....
WITH f,row
MATCH (otherNode:OtherLabel {id : row.otherNodeId})
MERGE (f) -[:REL1] -> (otherNode)