Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j Cypher查询-返回与2个或多个间接节点相关的第2层关系的节点_Neo4j_Cypher - Fatal编程技术网

Neo4j Cypher查询-返回与2个或多个间接节点相关的第2层关系的节点

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,

不确定如何最好地表达这一点-在下图中

我试图返回第二层节点与两个或多个第一层节点相关的所有节点,但仅返回第一层节点不同的节点。因此,在示例图片中,我想返回灰色节点660082、绿色节点110258以及与之相关的所有粉色节点和关系。例如,我不想看到绿色节点,其中粉红色节点与同一绿色节点有两个关系。到目前为止,我的密码是这样的

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
上聚合。我相信您的解决方案是正确的答案。然而,在我看来,问题中提供的问题描述与描述的输出不匹配。你同意吗?我同意问题中的颜色是错的。就是那个!谢谢,我相信你的解决方案是正确的。然而,在我看来,问题中提供的问题描述与描述的输出不匹配。你同意吗?我同意问题中的颜色是错的。就是那个!非常感谢