我正在尝试编写查询以返回与“ IMMEDIATE_FAMILY_MEMBER”相关的所有相关节点
这是我到目前为止的查询
MATCH (f:NaturalPerson)-[r:IMMEDIATE_FAMILY_MEMBER*1..6]-(t)
WHERE f.Name="Jacob"
RETURN f AS fromNode, t AS toNode, r AS Metadata
最初,我认为它运行良好,但是当我添加一个孩子Thuthukile(父母Jacob和Nkosazana)后,我得到了“重复”结果。
此刻查询将返回一对相关节点以及遍历将它们链接在一起的所有关系(即元数据)。
如何更改此查询,以便返回一对具有最短路径(所有关系)的独特节点。
还有一个额外的问题,是否可以为关系本身的标签指定或。即,相同的查询还包含:KNOWS关系
编辑:
cybersams的答案是正确的,我做了一个小小的改动就得到了想要的结果。
我最后的查询是这个
MATCH (f:NaturalPerson)-[r:IMMEDIATE_FAMILY_MEMBER*..6]-(t)
WHERE f.Name="Jacob" AND t.Name<>"Jacob"
WITH f, t, r
ORDER BY SIZE(r)
RETURN f AS fromNode, t AS toNode, COLLECT(r)[0] AS Metadata
我需要排除“来自某人”作为目的地,因为我对返回父母的最短路径不感兴趣
答案 0 :(得分:1)
放在一边:为什么NaturalPerson
?数据库中也有“不自然的”人吗?
这应该有效:
MATCH (f:NaturalPerson)-[r:IMMEDIATE_FAMILY_MEMBER*..6]-(t)
WHERE f.Name="Jacob"
WITH f, t, r
ORDER BY SIZE(r)
RETURN f AS fromNode, t AS toNode, COLLECT(r)[0] AS Metadata
查询按找到的路径的长度排序,使用aggregating function COLLECT
获取给定r
对的所有f
路径的列表,并t
值,并使用每个列表中的第一个(即最短的)路径。