2015-11-23 2 views
3

Я хочу найти разницу между количеством всех исходящих ребер и числом всех входящих ребер в один и тот же узел. Узлы - это города, а отношения - между ними.NEO4J - найти все входящие и исходящие ребра из узла

Я пытался сделать это:

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

Вы можете использовать размер по образцу отношений для входящих и исходящих соединений:

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 
+0

кажется, не работает! :( – SegFault

+0

что он возвращает? –

+0

количество исходящих и входящих ребер не соответствует тому, которое у меня есть на графике! Если я делаю отдельные запросы, цифры больше ... – SegFault

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 
+0

Нет, вы не http://console.neo4j.org/r/rpbg5p –

+0

О, правильно, потому что 'SIZE', duh –

+0

SO не позволяет мне понизить свой собственный ответ;) –