Neo4j 中拒绝生成关系

问题描述 投票:0回答:1

我一直在尝试使用 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)的关系

database neo4j
1个回答
0
投票

在不知道您的数据的情况下,我的预感是

MATCH
子句之一找不到该节点。既然如此,我们就默默地不再建立任何关系。

您可以尝试使用

OPTIONAL MATCH
来测试这个理论。然后,我们总是生成至少一个节点变量的绑定,可能是
null
。在这种情况下,查询将失败并告诉您找不到哪个节点。

© www.soinside.com 2019 - 2024. All rights reserved.