2016-09-30 3 views
1

Graph I am trying to parseNeo4j Cypher запросы, чтобы получить все дочерние узлы до достижения узла с определенной взаимосвязью

Я пытаюсь создать запрос, в котором начинается с синими узлами под названием «Аналитические Units». Запрос будет получать все под-узлы, если он не будет запущен в узел, который «переопределяет» отношения, будучи напрямую привязан к другому аналитическому блоку. Любая помощь будет оценена!

+1

Можете ли вы расширить это? Как и в случае с графиком, с которым вы связаны, пройдите нас через операции, которые вы ожидаете от правильного запроса, и ожидаемый результат. – InverseFalcon

+0

Кроме того, вы, похоже, имеете типы отношений, которые имеют противоположную направленность, но всегда существуют между одними и теми же узлами. Эта избыточность не нужна в neo4j, так как вы можете легко ориентироваться в любом направлении. – cybersam

+0

@ InverseFalcon Конечно, так что скажем, что я запросил начальный узел «Банка Америки» ... один из синих узлов ... Я хочу, чтобы все связанное с ним в коробке красным. Идея заключается в том, что все под ним будет «наследовать» отношения «аналитически часть», если только она не наткнулась на узел, который явно определяет это отношение где-то еще. Я не уверен, может быть, его лучшая практика, чтобы дать каждому узлу явные отношения. – patrickb19

ответ

1

Этот запрос работает на вас?

Он должен возвращать каждый узел Blue (который имеет путь к любым узлам Red) и его «под-узлам» (вдоль каждого из этих путей), игнорируя пути, в которых любой подузел (кроме первого) имеет входящие ANALYTICALLY_COMPOSED Отношение:

MATCH (a:Blue)-[:ANALYTICALLY_COMPOSED]->(b) 
MATCH p=(b)-[rels*]-(:Red) 
WITH a, NODES(p) AS subnodes 
WHERE NONE(n IN subnodes[1..] WHERE()-[:ANALYTICALLY_COMPOSED]->(n)) 
RETURN a, subnodes; 
+0

Да, это сделал трюк !! Спасибо! ... Просто пришлось отфильтровать, где «a.name =« Bank of America »на красном появлялся, потому что он шел с другого пути. – patrickb19

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