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

Graph NEO4J-查找节点的所有传入和传出边,graph,neo4j,cypher,Graph,Neo4j,Cypher,我想找出同一节点的所有传出边数和所有传入边数之间的差异。节点是城市,关系是城市之间的传输 我尝试过这样做: 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 differen

我想找出同一节点的所有传出边数和所有传入边数之间的差异。节点是城市,关系是城市之间的传输

我尝试过这样做:

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

但它们似乎不起作用。有什么想法吗?

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

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
MATCH(城市:城市{name:“伦敦”})
将大小((城市)-[:传输]->())作为输出,

大小((城市)我认为您需要分别匹配输入和输出(此处窃取Christophe的答案):

MATCH(城市:城市{name:“伦敦”})
使用city,大小((city)-[:TRANSFERS]->())为out

带城市、外出、大小((城市)它返回什么?传出和传入边的数目与我在图中的数目不对应!如果我进行单独的查询,数目会更大…你能在浏览器中截图显示你的数据或提供一些数据吗?根据你的描述,此查询确实有效可能有些关系名称是其他名称比
传输
?另外,Neo4j版本可能有不同?是
大小
在2.3中引入的吗?哈哈:)我在新控制台的谓词中发现了变量中的控制台转换
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