2015-02-13 3 views
0

У меня есть DAG в Neo4j и вы хотите найти корневой узел.Поиск корня DAG в Neo4j

Я попытался это:

match (r) where not()-[:HAS_CHILD]->(r) return r 

т.е. все узлы, которые не являются дочерним для другого узла. Однако это вернуло несколько тысяч результатов; это DAG с одним корнем!

Я взял один из возвращенных узлов и посмотрел на его окрестности. У него есть родители и дети, поэтому мой запрос неверен. Но я не могу определить, где и почему.

Я использую бета-версию neo4j-community-2.2.0-M03, поэтому ошибка не может быть исключена. Однако все это через консоль Neo4j.

Большое спасибо за вашу помощь - Кристофер

ответ

2

Я думаю, что вы очень близки к нахождению узлов без каких-либо отношений внутрь. Вам просто нужно было обернуть not в предложение where в круглых скобках.

match r-->() 
where not (()-[:HAS_CHILD]->r) 
return r 

Обновить, чтобы ответить. Вот небольшой ациклический граф с одним корневым узлом.

create (a:Node {name:'A'}) 
create (b:Node {name:'B'}) 
create (c:Node {name:'C'}) 
create (d:Node {name:'D'}) 
create (e:Node {name:'E'}) 
create (f:Node {name:'F'}) 
create (g:Node {name:'G'}) 
create (h:Node {name:'H'}) 
create a-[:POINTS]->b 
create a-[:POINTS]->c 
create c-[:POINTS]->d 
create c-[:POINTS]->e 
create c-[:POINTS]->f 
create f-[:POINTS]->g 
create f-[:POINTS]->h 

Когда я запрашиваю его со следующим запросом, я получаю только один корень. Я также использую сообщество 2.2.0-M03.

match (r:Node)-->() 
where not (()-->r) 
return r 
+0

Спасибо за помощь, но два запроса возвращают те же результаты. –

+0

np. Я добавил пример, который подходит для ответа. У вас есть только один корень в ваших данных? –

+0

Еще раз спасибо, я сделал несколько экспериментов на вашем примере, и результаты удивили меня. Сначала я создал дерево примеров, вставив первую строку в консоль, а затем оставшиеся строки. Это не сработало! Ваш запрос не возвращал никаких данных и использовал «match (a) return a» показал серый немаркированный верхний узел и отключенный «a» узел. Затем я удалил график и воссоздал, вставив весь пример за один раз. Этот DID работает, оба графика выглядят правильно со всеми узлами, помеченными и подключенными, как ожидалось, и запрос работал. –

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