Neo4j-如何使用单个MERGE从两列CSV文件创建节点?

时间:2018-06-30 13:04:58

标签: graph neo4j cypher graph-databases

我正在使用以下代码创建图形

LOAD CSV WITH HEADERS 
FROM "file:///fileName.csv"  
AS network
MERGE (n:sourceNode {id:network.node1})
MERGE (m:destNode {id:network.node2})
WITH n,m,network
CALL apoc.create.relationship(n, network.connection, {}, m) yield rel
RETURN n, 
rel, 
m  

它们的CSV文件包含重复的值,例如

node1,connection,node2
A,0.75,B  
c,0.5,A

此代码创建了一个类似graph1的图形
但是我需要像下面这样的图来进行分析graph2
我想到的一个解决方案是,我可以同时创建两个 node1node2与单个MERGE子句,因为它将创建非重复节点。我试图修改此代码,例如

MERGE (n:sourceNode {id:network.node1}, m:destNode {id:network.node2})  

和其他,但出现语法错误。可以请我解决这种情况吗?或对此问题有其他解决方案吗?

1 个答案:

答案 0 :(得分:1)

您有两个节点A,因为在MERGE中您没有使用相同的标签。 所以最后您有了:

  • 一个标签为A的节点sourceNode
  • 一个标签为A的节点destNode

如果您只想拥有一个节点A,请在源节点和目标节点上使用一个通用标签,如下所示:

LOAD CSV WITH HEADERS 
FROM "file:///fileName.csv"  
AS network
MERGE (n:Node {id:network.node1})
MERGE (m:Node {id:network.node2})
WITH n,m,network
CALL apoc.create.relationship(n, network.connection, {}, m) yield rel
RETURN n, 
rel, 
m  

此外,在此示例中,您应该在标签Node上为属性id创建一个唯一约束:CREATE UNIQUE CONSTRAINT ON (n:Node) ASSERT n.id IS UNIQUE;