Neo4j Cypher查询-返回与2个或多个间接节点相关的第2层关系的节点
不确定如何最好地表达这一点-在下图中 我试图返回第二层节点与两个或多个第一层节点相关的所有节点,但仅返回第一层节点不同的节点。因此,在示例图片中,我想返回灰色节点660082、绿色节点110258以及与之相关的所有粉色节点和关系。例如,我不想看到绿色节点,其中粉红色节点与同一绿色节点有两个关系。到目前为止,我的密码是这样的Neo4j Cypher查询-返回与2个或多个间接节点相关的第2层关系的节点,neo4j,cypher,Neo4j,Cypher,不确定如何最好地表达这一点-在下图中 我试图返回第二层节点与两个或多个第一层节点相关的所有节点,但仅返回第一层节点不同的节点。因此,在示例图片中,我想返回灰色节点660082、绿色节点110258以及与之相关的所有粉色节点和关系。例如,我不想看到绿色节点,其中粉红色节点与同一绿色节点有两个关系。到目前为止,我的密码是这样的 MATCH (i:IFB_Flagged)-[r]->(m:Matters)<-[r2]-(ie:Indirect_Entity) WITH i, ie,r,
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
匹配(i:IFB_标记)-[r]->(m:Matters)1和i.id='660082'
返回i,即重叠
当它过滤掉只有一个指向绿色节点的链接的粉色节点时,这看起来确实有效,但是我不知道如何只返回相关绿色节点不是同一节点的粉色节点
更新
当向collect添加distinct&完全删除where子句时,我得到了一个完全不同的图,但是它实际上更接近我想要显示的内容
我仍然希望看到与多个绿色节点相关的所有粉红色节点,但是我不希望看到仅与一个绿色节点相关的粉红色节点(屏幕左下角的6个粉红色节点)
这是我的密码-我不知道为什么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
MATCH(i:IFB_标记)-[r]->(m:Matters)使用DISTINCT
关键字进行collect
():
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
匹配(i:IFB_标记)-[r]->(m:Matters)1
返回i,即重叠
限制20
使用DISTINCT
关键字进行收集
():
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
匹配(i:IFB_标记)-[r]->(m:Matters)1
返回i,即重叠
限制20
但在您的示例中,所有红色节点的绿色节点相同,每个红色节点的两个关系相同。。。无论如何,试着在你的collect中放一个distinct子句,这样:collect(distinct m)
问题的措辞与你实际想要的不匹配。问题中的红色节点实际上更像粉红色。让我们等待OP把这一点弄清楚。为了清楚起见,编辑了我的原始问题“我不确定为什么collect(distinct m)在这种情况下不起作用?”它不起作用,因为您在WITH
子句中留下了变量r
,因此,它将分别在每个r
上聚合。但在您的示例中,所有红色节点的绿色节点相同,每个红色节点的两个关系相同。。。无论如何,试着在你的collect中放一个distinct子句,这样:collect(distinct m)
问题的措辞与你实际想要的不匹配。问题中的红色节点实际上更像粉红色。让我们等待OP来澄清这一点。为了清晰起见,编辑了我的原始问题“我不确定为什么collect(distinct m)在这种情况下不起作用?”它不起作用,因为您在WITH
子句中留下了变量r
,因此它将分别在每个r
上聚合。我相信您的解决方案是正确的答案。然而,在我看来,问题中提供的问题描述与描述的输出不匹配。你同意吗?我同意问题中的颜色是错的。就是那个!谢谢,我相信你的解决方案是正确的。然而,在我看来,问题中提供的问题描述与描述的输出不匹配。你同意吗?我同意问题中的颜色是错的。就是那个!非常感谢