无法动态建立NEO4J中两个节点属性之间的关系

时间:2019-06-23 07:30:19

标签: neo4j cypher neo4j-apoc

我正在尝试在graphdb的2个属性之间建立关系。我有这样的csv文件

RELATIONSHIP,AGENTID,CUSTOMERID,TXNID,TIMESTAMP,AMOUNT,CHANNEL
hasrelation,17956,2025,6C13MXSESN,2019-03-01T11:52:08,1000,USSD
hasrelation,17957,2026,6C13MXSEVF,2019-03-01T11:52:09,5000,BAPP

在Neo4j GUI中,我分别创建了两个节点AGENT和CUSTOMER 对于代理商

ID,SHOPNAME,DIVISION,DISTRICT,THANA

17956,CONNECT DISTRIBUTION,DHAKA,GAZIPUR,Gazipur Sadar
17957,HUMAYUN KABIR,DHAKA,DHAKA,Demra

对于“客户”节点

ID,DIVISION,DISTRICT,THANA,REGDATE,APPREGDATE
2025,KHULNA,JESSORE,JESSORE SADAR,2019-02-14,
2026,DHAKA,TANGAIL,KALIHATI,2017-02-10

在这种情况下,最后一列为空

所以我已经通过Neo4J社区的引用编写了查询

LOAD CSV WITH HEADERS FROM "file:///test.csv" AS row
MATCH (f:Agent), (s:Customer)
WHERE f.ID = row.AGENTID
AND s.ID = row.CUSTOMERID
CALL apoc.create.relationship(f, row.RELATIONSHIP,{}, s) YIELD rel
return rel

但是他们之间没有建立任何关系。由于我是neo4j的新手,请向我建议我在这里缺少的东西,并帮助我解决这个问题

1 个答案:

答案 0 :(得分:0)

您的语法看起来正确,因此我将尝试确认您的match语句的行为符合您的预期。

根据您创建测试节点的方式,这些条件检查:

WHERE f.ID = row.AGENTID
AND s.ID = row.CUSTOMERID

可能是问题所在。 load_csv函数最初会将加载的所有内容都视为字符串,但是您可能已经使用基于整数的ID创建了节点。

尝试:

WHERE f.ID = toInteger(row.AGENTID)
AND s.ID = to.Integer(row.CUSTOMERID)

如果这不起作用,您可以尝试用MERGE替换MATCH语句,这将有助于确认问题的根源(如果走这条路,别忘了清理重复的节点)。