我一直在尝试使用 csv 文件生成两个现有节点之间的关系,代码如下所示:
LOAD CSV WITH HEADERS FROM "major.csv" AS row
MATCH(std:students {snum:toInteger(row.snum)})
MATCH (deg:degrees {name:row.name, level:row.level})
CREATE (std)-[:major]->(deg);
已经创建了学生和学位。但由于某种原因,没有建立任何关系。任何帮助将不胜感激!!
创建学生:
LOAD CSV WITH HEADERS FROM "students.csv" AS row
CREATE(std:students {
snum:toInteger(row.snum),
ssn:toInteger(row.ssn),
name:row.name,
gender:row.gender,
dob:row.dob,
c_addr:row.c_addr,
c_phone:row.c_phone,
p_addr:row.p_addr,
p_phone:row.p_phone
});
创建学位:
LOAD CSV WITH HEADERS FROM "degrees.csv" AS row
CREATE (dgr:degrees {
name:row.name,
level:row.level
});
我花了很长时间在网上查找东西,但找不到任何可以修复它的东西。我从尝试过的某些事情中得到了一种关系,但它不是正确的关系,因此我无法查询从一个节点到另一个节点的任何内容。
LOAD CSV WITH HEADERS FROM "major.csv" AS row
CREATE(maj:major)
WITH maj, row
MATCH (std: students {snum:toInteger(row.snum)})
CREATE (std)-[:major]->(maj)
WITH maj, row
MATCH (deg: degrees {name:row.name, level:row.level})
CREATE (deg)-[:administers]->(maj);
这只是添加了从学生到一个名为 Major 的随机节点(只有一个 id)的关系
在不知道您的数据的情况下,我的预感是
MATCH
子句之一找不到该节点。既然如此,我们就默默地不再建立任何关系。
您可以尝试使用
OPTIONAL MATCH
来测试这个理论。然后,我们总是生成至少一个节点变量的绑定,可能是null
。在这种情况下,查询将失败并告诉您找不到哪个节点。