NEO4J - 查找节点的所有入边和出边

4

我希望找出所有出边和入边的数量之差,这些边连接的是城市节点,表示它们之间的转移关系。

我已经尝试了以下方法:

MATCH ()-[i:TRANSFERS]->(n:City {name:"London"}),(n:City {name:"London"})-[o:TRANSFERS]->() 
RETURN distinct n.name, count(i) AS incoming, count(o) as outgoing, count(o)-count(i) AS difference
ORDER BY outgoing - incoming DESC

并且还有这个:

MATCH ()-[i:TRANSFERS]->(n:City {name:"London"})
OPTIONAL MATCH (n:City {name:"London"})-[o:TRANSFERS]->() 
RETURN distinct n.name, count(i) AS incoming, count(o) as outgoing, count(o)-count(i) AS difference
ORDER BY outgoing - incoming DESC

但它们似乎没有起作用。有什么想法吗?
2个回答

4

您可以在入站和出站连接的关系模式上使用大小:

MATCH (city:City {name:"London"})
WITH size((city)-[:TRANSFERS]->()) as out, 
     size((city)<-[:TRANSFERS]-()) as in,
     city
RETURN city, in, out, (out - in) as diff
ORDER BY diff DESC

它返回什么? - Christophe Willemsen
出边和入边的数量与图中的不对应!如果我进行单独查询,数字会更大... - SegFault
你能否在浏览器中截取你的数据屏幕截图或提供一些数据?根据你的描述,这个查询肯定是有效的。 - Christophe Willemsen
也许一些关系名称不是TRANSFERS - Brian Underwood
还有,也许Neo4j版本有所不同?size是在2.3中引入的吗? - Brian Underwood
我最喜欢的密码子语句 :) :) - Christophe Willemsen

0

我认为你需要分别匹配输入和输出(这里借用了Christophe的答案):

MATCH (city:City {name:"London"})
WITH city, size((city)-[:TRANSFERS]->()) as out
WITH city, out, size((city)<-[:TRANSFERS]-()) as in,
RETURN city, in, out, (out - in) as diff
ORDER BY diff DESC

哈哈 :) 我发现了在 IN 谓词中的变量控制台转换,新的控制台地址 http://console.neo4j.org/r/ih4epf - Christophe Willemsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接