一对一关系

时间:2019-02-21 09:23:06

标签: neo4j cypher

我有一个csv文件,其中包含3列名为 thingname (事物名称,例如A,B,.....)的列,第二列具有 thingtype (事物名称)家具,文具...),第三列是说明(事物的说明)。现在,我正在尝试按照图形要求执行类似的操作。

任何人都可以帮助我编写查询。我收到以下错误消息:

  

不能为thingType使用空属性值合并关系

LOAD CSV WITH HEADERS FROM "http://abc:port/a.csv" as line
MERGE (RealThings:realthings {name: "RealThings"})
MERGE (Basic:BasicThings{fieldname:"BasicThings"})
MERGE (Def:DEFINITION{name: "Definition"})
MERGE (e:thing {Name:line.thingname})
MERGE (Basic) -[:Contains]-> (e)
MERGE (RealThings) -[:Has_To_Configure]-> (Basic)
MERGE (e)-[:DEFINITION{thingType:line.thingType,description:line.description}]->(Def)

此查询是否有问题?仍然出现错误,我的目的没有实现。请让我知道我在哪里做错了。

3 个答案:

答案 0 :(得分:1)

某些功能,例如merge,在使用空值时不能很好地工作。您可以使用matchcreate选项来规避这一点:

MERGE (e)-[r1:DEFINITION]->(Def) 
on create set r1.thingType = line.thingType 
on create set r1.description = line.description
on match set r1.thingType = line.thingType

答案 1 :(得分:0)

检查a.csv文件,我认为thingType列不可用...

答案 2 :(得分:0)

在多个查询中相同。我认为您打算按以下方式绘制图形。

RealThings ---(1:1)---> BasicThings ---(1:n)--->事物---(n:1)--->定义

MERGE (RealThings:realthings {name: "RealThings"})
MERGE (Basic:BasicThings{fieldname:"BasicThings"})
MERGE (Def:DEFINITION{name: "Definition"})

在LOAD内部,它将创建多个实例,而不是单个节点。

以下查询将生成图形。

CREATE (RealThings:realthings {name: "RealThings"});
CREATE (Basic:BasicThings{fieldname:"BasicThings"});
CREATE (Def:DEFINITION{name: "Definition"});
LOAD CSV WITH HEADERS FROM "http://abc:port/a.csv" AS line
CREATE (e:thing {Name:line.thingname})
WITH e,line MATCH (m:BasicThings),(d:DEFINITION)
CREATE (m)-[:HAS_ROLE]->(e)
CREATE (e)-[:definition{thingType:line.thingType,description:line.description}]->(d);
CREATE (RealThings) -[:Has_To_Configure]-> (Basic);