我正在尝试在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的新手,请向我建议我在这里缺少的东西,并帮助我解决这个问题
答案 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语句,这将有助于确认问题的根源(如果走这条路,别忘了清理重复的节点)。