不确定如何最好地说出这一点 - 在下图中
我试图返回第二层节点与第一层节点中的两个或更多节点相关的所有节点,但仅返回第一层节点不同的节点。因此,在示例图片中,我想要返回灰色节点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
这看起来有效,因为它过滤掉只有一个绿色节点链接的粉红色节点,但我无法弄清楚如何仅返回相关绿色节点不是同一节点的粉红色节点< / p>
更新
在收集和添加时添加一个独特的完全删除where子句我得到一个完全不同的图表,但它实际上更接近我想要展示的
我仍然希望看到与多个绿色节点相关的所有粉红色节点 - 但是我不希望看到仅与一个绿色节点相关的粉红色节点(屏幕左下角的6个粉红色节点)
这是我的Cypher - 我不确定为什么收集(不同的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
答案 0 :(得分:2)
使用DISTINCT
(docs)的collect
关键字:
DISTINCT
运算符与聚合一起使用。它用于在通过聚合函数运行它们之前使所有值唯一。
此外,您可以在id
子句中移动MATCH
的检查以简洁。
更新。试试这个。
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