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



我正在尝试在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 中,我分别创建了两个节点代理和客户对于代理

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很陌生,请建议我在这里缺少什么并帮助我解决这个问题,谢谢

您的语法看起来正确,因此我会尝试确认您的匹配语句的行为是否符合您的预期。

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

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)

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

最新更新