2015-02-10 1 views
2

Я борюсь с проблемой, несмотря на то, что прочитал много документации ... Я пытаюсь найти свой корневой узел графа (или узлы, они могут быть несколькими верхними узлами) и подсчет их непосредственных детей (все отношения напечатаны: BELONGS_TO)Neo4j cypher - подсчет немедленных дочерних узлов корневых узлов

Мой график выглядит следующим образом (см. скриншот). Я пытаюсь выполнить следующий запрос, который работает до тех пор, пока корневой узел имеет только одно отношение, и это не так, когда у него больше одного. (я еще не знаком с языком cyhper).

MATCH (n:Somelabel) WHERE NOT (()-[:BELONGS_TO]->(n:Somelabel)) RETURN n 

Любая помощь будет очень признательна! (Я даже не пытался сосчитать корневые узлы немедленные детей еще ... что бы «2» в соответствии с моим графиком)

enter image description here

Правильный запрос был дан cybersam

MATCH (n:Somelabel) WHERE NOT (n)-[:BELONGS_TO]->() RETURN n; 

MATCH (n:Somelabel)<-[:BELONGS_TO]-(c:Somelabel) 
WHERE NOT (n)-[:BELONGS_TO]->() RETURN n, count(c); 
+0

Может кто-нибудь отредактировать это, так что это не первый результат поиска для поиска корневых узлов? – tladuke

ответ

4

Основываясь на вашей диаграмме, похоже, что вы на самом деле ищете «листовые» узлы. Этот запрос будет искать все узлы Somelabel, у которых нет исходящих связей, и возвращать каждый такой узел вместе с подсчетом количества отдельных узлов, которые имеют отношение, указывающее на этот узел.

MATCH (n:Somelabel) 
WHERE NOT (n)-[:BELONGS_TO]->() 
OPTIONAL MATCH (m)-[:BELONGS_TO]->(n) 
RETURN n, COUNT(DISTINCT m); 

Если вы действительно ищете все «корневые» узлы, ваш исходный запрос работал бы.

В качестве проверки вменяемости, если у вас есть конкретный узел, который вы считаете, это узел «лист» (скажем, это имеет id значение 123), этот запрос должен возвращать одну строку с null значений для r и m , Если вы получаете непустые результаты, то у вас действительно есть исходящие отношения.

MATCH (n {id:123}) 
OPTIONAL MATCH (n)-[r]->(m) 
RETURN r, m 
+0

На самом деле я пытаюсь найти все листовые узлы (те, которые не имеют исходящих отношений). «BELONGS_TO меня смущает. Тем не менее, запросы не возвращают мой узел ... –

+0

Я добавил тип отношений': BELONGS_TO' к моему ответу, так как у вас могут быть другие типы отношений (которые начинаются с вашего «листовые» узлы). Кроме того, вы уверены, что используете подходящую метку для своих узлов? – cybersam

+0

Спасибо за это. Да, я использую правильный ярлык ;-). Все еще не работает. Мне интересно, этот листовой узел, который я пытаюсь найти, может иметь другие исходящие отношения, которые я не вижу в браузере Neo4j ... может быть так? Как я могу перечислить все отношения с/из этого узла (по {id: "sssss"}, чтобы узнать? Последнее: узел листа имеет несколько входящих отношений. Вы бы запросили работу, хотя? –

 Смежные вопросы

  • Нет связанных вопросов^_^