【发布时间】:2019-11-06 15:28:04
【问题描述】:
我正在尝试编写一个查询以返回与“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
我需要排除“来自人”作为目的地,因为我对返回父级的最短路径不感兴趣
【问题讨论】:
-
您得到了“重复”的结果,因为您的查询实际上是从 Jacob 请求最多 6 个跃点的所有不同路径。以 Thuthkile 为例,Jacob 有两条不同的路径,JacobThuthkile。
-
谢谢@Lju,我直观地理解了我只是不明白如何使用collect来解决问题的部分