neo4j остановить обход по условию (шифрование)

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

Например. Если у вас есть граф древовидного типа с узлами и подузлами. Все узлы имеют свойство published, которое равно 1 или 0. Я хотел бы пройти по дереву, не включая ни одного узла с published:0 (и его детей, даже если у них есть published:1)

До сих пор (где n является корневым узлом) n-[:HAS_CHILD_CONTENT*]->m WHERE m.published=1 return m;, очевидно, просто возвращает все опубликованные узлы, игнорируя тот факт, что некоторые узлы имеют неопубликованный родитель.

Может ли кто-нибудь помочь мне разобраться с этим? Заранее спасибо.

PS: я использую Neo4j - Graph Database Kernel 2.0.0-M02 через шифровальную оболочку веб-приложения на ubuntu 12.04 LTS


person Pomme.Verte    schedule 02.05.2013    source источник
comment
Почему бы просто не добавить AND n.published = 1?   -  person ean5533    schedule 03.05.2013
comment
@ ean5533 это не работает. он по-прежнему будет выбирать опубликованные подузлы, даже если один из родительских узлов не опубликован.   -  person Pomme.Verte    schedule 03.05.2013
comment
А, вы добавили в свой запрос *, которого раньше не было.   -  person ean5533    schedule 03.05.2013
comment
@ ean5533 да, извини за это. Я только потом понял, что забыл это вставить   -  person Pomme.Verte    schedule 03.05.2013


Ответы (1)


Вы можете изучить путь, например

match p=root-[:PARENT*..]-file 
   where root.name='a' and all(x in nodes(p) WHERE x.published = true) 
return p;

http://docs.neo4j.org/chunked/preview/query-function.html#functions-all

См. пример на http://bit.ly/12ARbL5.

person Peter Neubauer    schedule 04.05.2013
comment
Это идеально!! Большое спасибо! Я пропустил, что все использовалось таким образом из документации. Знаете ли вы, какое влияние all оказывает на производительность запросов? И/или есть ли способы оптимизации производительности? - person Pomme.Verte; 05.05.2013
comment
Это, вероятно, не самый быстрый, поскольку Cypher еще не втягивает эти перекрестные выражения в средство сопоставления с образцом. Если производительность не соответствует вашим потребностям, проверьте базовый API Java (node.getRelationships и node.getProperty) или API обхода (docs.neo4j.org/chunked/milestone/tutorial-traversal.html), чтобы сократить обход при обнаружении неопубликованного родителя. - person Michael Hunger; 05.05.2013