暗号查询 - 这是与2个或更多的间接节点

问题描述:

不确定的第2层关系的回报节点如何最好地字本 - 下面的图中暗号查询 - 这是与2个或更多的间接节点

neo

我试图返回的所有节点第二层节点与2个或更多第一层节点相关,但只有第一层节点不同。因此,在示例图片中,我想返回灰色节点660082,绿色节点110258以及与它相关的所有粉色节点&关系。例如,我不想看到粉红色节点与同一绿色节点具有2个关系的绿色节点。到目前为止,我的暗号看起来像这样

MATCH (i:IFB_Flagged)-[r]->(m:Matters)<-[r2]-(ie:Indirect_Entity) 
WITH i, ie,r, collect(m) AS overlap 
WHERE size(overlap) > 1 and i.id = '660082' 
RETURN i, ie, overlap 

这确实出现了工作,因为它筛选出只有一个链接到一个绿色节点粉红色的节点,但我无法弄清楚如何只返回粉红色的节点,其中相关的绿色节点不是同一个节点

UPDATE

当增加一个独特的收集&删除where子句完全,我得到一个完全不同的曲线,但它实际上是接近我想要显示neo2

我仍然希望看到与多个绿色节点相关的所有粉色节点 - 但我不想看到仅与一个绿色节点(屏幕左下角的6个粉色节点)相关的粉色节点

这是我的Cypher - 我不确定为什么collect(distinct m)在这种情况下不起作用?

MATCH (i:IFB_Flagged)-[r]->(m:Matters)<-[r2]-(ie:Indirect_Entity) 
WITH i, ie,r, collect(distinct m) AS overlap 
WHERE i.id = '385886' 
RETURN i, ie, overlap limit 20 
+1

但在你的榜样绿色节点是所有红色节点相同,同为每个红色节点的两个关系......总之,可以尝试在一个独特的条款在您的收集,是这样的:'收集(明确的m)' –

+1

问题的措词不符合你实际上想要的。 – cybersam

+0

问题中的红色节点实际上更像粉红色。让我们等待OP得到这个结果。 –

使用DISTINCT关键字为collectdocs):

DISTINCT运营商一起工作与聚集。它用于在通过聚合函数运行它们之前使所有值都具有唯一性。

另外,为简明起见,您可以在MATCH子句内移动支票id

更新。试试这个。

MATCH (i:IFB_Flagged)-[r]->(m:Matters)<-[r2]-(ie:Indirect_Entity) 
WHERE i.id = '385886' 
WITH i, ie, collect(distinct m) AS overlap 
WHERE size(overlap) > 1 
RETURN i, ie, overlap 
LIMIT 20 
+1

我相信您的解决方案是正确的答案。但是,在我看来,问题中提供的问题描述与描述的输出不匹配。你同意? –

+0

我同意问题中的颜色已关闭。 –

+0

就是这样!非常感谢 –