共享相同标签的两个节点之间的任何长度关系

时间:2014-06-13 16:36:11

标签: neo4j cypher

我试图找到一个查询,该查询将向我显示共享相同索引的两个节点之间存在的任何长度关系。基本上,如果特定标签之间存在任何重叠。我的图表非常简单,并不是特别大:

(m:`Campaign`), (n:`Politician`), (o:`Assistant`), (p:`Staff`), (q:`Aid`),  (s:`Contributor`)
(m)<-[:Campaigns_for]-(n)
(o)<-[:works_for]-(m)
(p)<-[:works_for]-(o)
(q)<-[:volunteers_for]-(p)
(m)<-[:contributes_to]-(s)

我想找到所有共享节点及其在广告系列之间的关系。 到目前为止我有:

MATCH (n:`Campaign`)-[r*]-(m:`Campaign`)
RETURN n,count(r) as R,m
ORDER BY R DESC

但它没有返回我想要的每一个东西,除了计数,每个关系的标签和两者之间的节点名称之外,我想要。

1 个答案:

答案 0 :(得分:2)

假设“节点的名称”意味着“返回节点的名称属性”(如果你在标签之后,你总是可以用“labels(n)”代替),那么像这样的东西可能有用,但是你这里有一些聚合,所以你可能需要解析一下:

MATCH p =(a:Campaign)-[r*]-(b:Campaign)
RETURN a, length(relationships(p)) AS count, b, extract(x IN relationships(p)| type(x)), extract(x IN nodes(p)| x.name)
ORDER BY count DESC

我还假设当你说“没有归还你想要的一切”时,你的意思是除了你的结果集中当前返回的内容之外,你还想要你列出的其他项目。

请记住,您的图表中也可能有一个循环(不太了解您的特定图表),因此,您可能需要检查开始和结束节点。