如何返回每个节点的传入和传出关系的数量

时间:2015-09-01 16:25:13

标签: neo4j

我希望计算每个节点的传入关系数和传出关系数(这可以提供一些与连接有关的洞察力)。

我可以使用如下查询获取传入(或传出)的数量:

MATCH outg=(a)-->(b)
RETURN a.name, labels(a) AS Stereotype,count(rels(outg)) AS out
ORDER BY out DESC

这很有效。

但是,如果我尝试添加传入关系:

MATCH outg=(a)-->(b), incom=(c)-->(a)
RETURN a.name, labels(a) AS Stereotype,count(rels(outg)) AS out, count(rels(incom)) AS in
ORDER BY out DESC
然后它不会产生我所期望的。在这种情况下,传入和传出计数都是相同的,并且远远高于其自身(因此会进行某种乘法)。

如何处理以及第二种情况下使用的逻辑有什么问题?

4 个答案:

答案 0 :(得分:14)

我投票赞成了Nicole和Sam的答案。

但我认为还有更简单的方法:

MATCH (a)
RETURN id(a), labels(a) as stereotype, 
size((a)-->()) as out, size((a)<--()) as in

您可以使用您想要的任何属性更改id(a)

答案 1 :(得分:2)

我这样做。假设您已加载电影数据集:

MATCH (a)-[r]-(b)
RETURN COALESCE(a.name, a.title), LABELS(a) AS Label,
       SUM(CASE WHEN STARTNODE(r) = a THEN 1 ELSE 0 END) AS outgoing,
       SUM(CASE WHEN STARTNODE(r) = b THEN 1 ELSE 0 END) AS incoming
ORDER BY outgoing DESC

您可以在此处查看其结果:http://console.neo4j.org/r/6ebvy8

答案 2 :(得分:2)

此查询应该适合您。逻辑很简单。

@font-face
{
    font-family:OpenSans-Regular;
    src:url(fonts/OpenSans-Regular.ttf);
}

.navbar-default{
    background: #fff;
    margin-top:2%;
    border:0px;
}

.navbar-brand
{
    font-family: Open Sans;
    font-size: 22px;
}

ul, li, a
{
    font-family: Open Sans;
    font-weight: 400;
    font-size: 22px;
    color: #000000;
    font-weight: 100;
    letter-spacing:-1px;
}

.navbar-toggle
{
    border:0px;
}


.container .jumbotron.no-padding
{
    background: #fff;
    border:0px;
    font-family: Open Sans;
    font-size: 22px;
    text-decoration: none;
    padding-left: 0;
    padding-right: 0;
    color:#000000;
}

.footer {
    position: absolute;
    width:100%;
    bottom:0;
    left:0;
    text-align: right;
}

.right.carousel-control, .left.carousel-control {
    opacity: 0;
    filter:alpha(opacity=0); /* IE support */
    width:50%;
    height:100%;
}

img
{
    margin:auto;
}

figcaption
{
    display:inline-block;
    text-align:left;
    margin-left:auto;
    margin-right: auto;
}
展示查询的

Here is a console

您的查询无法正常工作的原因之一是因为它使用MATCH (a) OPTIONAL MATCH (a)-->(b) WITH a, LENGTH(COLLECT(b)) AS out OPTIONAL MATCH (c)-->(a) RETURN a.name, labels(a) AS Stereotype, out, LENGTH(COLLECT(c)) AS in ORDER BY out DESC; 函数,该函数返回行数 - 而不是集合的长度(或大小)。

答案 3 :(得分:0)

col1 col2 col3
test2 test2 test2
test3 test3 test