Neo4j 共享同一标签的两个节点之间的任意长度关系

Neo4j 共享同一标签的两个节点之间的任意长度关系,neo4j,cypher,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

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

(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)
但是它并没有返回我想要的所有内容,我想要的是除了计数、每个关系的标签以及中间节点的名称之外。

假设“节点名称”意味着“返回节点的名称属性”(如果您在标签之后,您可以始终替换为“标签(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
我还假设,当你说“不返回你想要的一切”时,你的意思是,除了结果集中当前返回的内容外,你只需要列出的其他项目


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

完美,您所有的假设都是正确的-我还没有遇到“提取”函数,这正是我需要的。谢谢
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