我未能在Neo4J中建立关系,我想鼓励任何成功完成它的人帮助我。
期望的结果是详细描述谁是谁的兄弟,谁是谁的母亲等等。我想从单亲子关系中提取数据。这意味着,如果节点的父名称对应于字段node.name且节点的性别为F,则设置类似[:relatedTo {:how ['daughter']}的关系。
我的CSV文件看起来像这样。
1;Jakub Hančin;M;1994;4;3
2;Hana Hančinová;F;1991;4;3
3;Alojz Hančin jr.;M;1968;15;14
4;Viera Hančinová;F;1968;9;
5;Miroslav Barus sr.;M;1965;9;
6;Helena Barusová;F;1942;;
7;Miroslav Barus jr.;M;1995;6;5
8;Martin Barus;M;1991;6;5
9;Hedviga Barusová;F;1945;;
10;Peter Hančin jr.;M;1991;12;13
11;Zuzka Hančinová;F;1996;12;13
12;Andrea Hančinová;F;1966;;
13;Peter Hančin sr.;M;1965;15;14
14;Alojz Hančin sr.;M;1937;;
15;Anna Hančinová;F;1945;;
这是我个人的家谱,我想通过Neo4J想象它。 它是用Excel创建的文件,我将信息放入表中并创建数据库。然后它被转换为.csv文件,可以导入Neo4J。我已成功安装它,现在我正在编写Cypher脚本来管理它。到目前为止,我有这个:
LOAD CSV WITH HEADERS FROM "file:c:/users/Skelo/Desktop/Family Database/Family Database CSV UTF.txt" AS row FIELDTERMINATOR ';'
CREATE (n:Person)
SET n = row, n.name = row.name,
n.personID = toInt(row.personID) , n.G = row.G,
n.Year = toInt(row.Year), n.Parent1 = row.Parent1, n.Parent2 = row.Parent2
WITH n
MATCH(n:Person),(b:Person)
WHERE n.Parent1 = b.name OR n.Parent2 = b.name
CASE b.gender
WHEN b.gender = 'F' THEN
CREATE (b)-[:isRelatedTo{how:['mother']}]->(n)
WHEN b.gender = 'M' THEN
CREATE (b)-[:isRelatedTo{how:['father']}]->(n)
RETURN *
显示的错误消息如下所示。
Invalid input 'A': expected 'r/R' (line 11, column 2 (offset: 389))
"CASE b.gender"
^
不知何故,我无法弄清楚为什么这不起作用。为什么我不能使用Case命令?除了命令CREATE之外,Neo4J不允许我使用任何东西(它在C之后需要字母R而不是A,这意味着CREATE命令)。
同样,我想这样做。我有一些正确设置的节点。对于每个节点(它们代表人),我想查看Parent1和Parent2字段,并查找与这些字段之一具有相同名称的节点。如果它匹配其中一个,我想将该节点标记为前一节点的父亲或母亲(根据节点的性别来判断,代表该人)。
这样我想用很多关系来填充图数据库,但是在这个非常基本的步骤中我失败了。请帮我。如果可以的话,请不要只说出错是什么以及为什么会出错,而是提出一个有效的解决方案。
答案 0 :(得分:1)
由于您想要创建isRelatedTo
关系而不考虑性别,并且只有属性依赖于条件,请执行以下操作:
CREATE (b)-[r:isRelatedTo]->(n)
SET r.how = CASE b.gender WHEN 'F' THEN 'mother' ELSE 'father' END