Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 通过Cypher导入CSV时避免处理重复数据_Neo4j_Cypher - Fatal编程技术网

Neo4j 通过Cypher导入CSV时避免处理重复数据

Neo4j 通过Cypher导入CSV时避免处理重复数据,neo4j,cypher,Neo4j,Cypher,我有一组具有重复数据的CSV文件,即同一行可能(并且确实)出现在多个文件中。每一行都由一列(id)唯一标识,并有许多其他列指示属性以及所需关系(即要链接到的其他节点的id)。这些文件的格式都相同 我的问题是,由于文件的大小和数量,我希望避免处理已经存在的行—我知道,只要id相同,文件中的行内容就会相同 任何cypher向导都可以建议如何编写一个查询,如果不存在具有给定id的节点,该查询将创建该节点、设置所有属性并创建所有关系,但如果找到该节点,则完全跳过该操作?我尝试在创建时使用MERGE,大致

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

我的问题是,由于文件的大小和数量,我希望避免处理已经存在的行—我知道,只要id相同,文件中的行内容就会相同

任何cypher向导都可以建议如何编写一个查询,如果不存在具有给定id的节点,该查询将创建该节点、设置所有属性并创建所有关系,但如果找到该节点,则完全跳过该操作?我尝试在创建时使用MERGE,大致如下:

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)
但不幸的是,这只能应用于不再设置属性,但我无法解决如何跳过关系的合并部分(这里只显示了一个,但还有很多)


提前谢谢

您可以选择匹配节点,然后使用
跳过,其中n为NULL
确保在
:MyLabel(id)


为什么要跳过关系的合并?如果要合并它们,则不应重新创建它们。您还检查了
MERGE
语句是否在CREATE上有
,但在MATCH上也有
语句,您可以在其中指定它在节点已经存在的情况下执行不同的操作?是的,@frobberoffits是正确的。如果您的查询在创建过程中工作正常,并且您只想在实例已经存在时不进行
合并
。在完成所有操作之后,对匹配集使用
,然后编写自定义查询。我的意思是,我不想执行关系的匹配/合并,因为这是浪费时间-如前所述,数据集很大,一旦我通过id匹配了该节点,我想跳过任何进一步的处理-就我所知,创建/匹配只适用于集合操作-它不允许跳过合并关系位。我知道这些关系不会被复制,但是匹配它们(比这里显示的要多很多)是完全不必要的,并且会使导入速度变慢。亲爱的,这正是我想要的。我不得不更改标识符的名称(不能使用f两次),但似乎效果很好:)谢谢!我一定是暂时性的脑功能衰竭,我自己也无法解决这个问题:)
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)