【问题标题】:Any length relationship between two nodes that share the same label共享相同标签的两个节点之间的任意长度关系
【发布时间】:2014-06-13 16:36:11
【问题描述】:

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

(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

但它并没有返回我想要的所有内容,除了计数、每个关系的标签和中间节点的名称之外,我还想要。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    假设“节点的名称”意味着“返回节点的名称属性”(如果您在标签之后,您总是可以替换为“标签(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
    

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

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

    【讨论】:

    • 完美,您的所有假设都是正确的——我还没有遇到“提取”功能,而这正是我所需要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多