【问题标题】:How to correctly use conditionals like IF or CASE in Cypher query language (Neo4J) to successfully create relationships?如何正确使用 Cypher 查询语言 (Neo4J) 中的 IF 或 CASE 等条件来成功创建关系?
【发布时间】:2015-07-13 15:39:53
【问题描述】:

我未能在 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 创建的文件,我将信息放入表中并创建一个数据库。然后将其转换为可导入 Neo4J 的 .csv 文件。我已经成功安装了它,现在我正在编写 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 命令? Neo4J 不允许我使用除命令 CREATE 之外的任何内容(它希望 C 后面有一个字母 R 而不是 A,这意味着 CREATE 命令)。

再次,我想这样做。我有一些正确设置的节点。对于每个节点(它们代表人),我想查看 Parent1 和 Parent2 字段并查找与这些字段之一具有相同名称的节点。如果它匹配其中一个,我想将该节点标记为前一个节点的父亲或母亲(根据节点的性别判断,代表人)。

这样我想用许多关系填充图形数据库,但我在这个非常基本的步骤上失败了。请帮我。如果可以的话,请不要只说什么是错的以及为什么是错的,而是提出一个可行的解决方案。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    由于您要创建isRelatedTo 关系而不考虑性别,并且只有属性依赖于条件,因此请执行以下操作:

    CREATE (b)-[r:isRelatedTo]->(n)
    SET r.how = CASE b.gender WHEN 'F' THEN 'mother' ELSE 'father' END
    

    【讨论】:

      猜你喜欢
      • 2022-12-22
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      相关资源
      最近更新 更多