Neo4j Cypher, как включить другой узел связи родителя в запрос APOC neo4j cypher - PullRequest
0 голосов
/ 06 сентября 2018

Давайте считать

  • Drone (родитель)
    • Quadcropter (Детский)
      • Pixel (Grand Child)

с [: SUB_CATEGORY] в качестве узла отношения enter image description here

ниже запроса Cypher для извлечения вместе с его частями, помеченными каждым узлом

MATCH p=(n:Category)-[:SUB_CATEGORY*]->(m)<-[:TAGGED_TO]-(part:Part)
WHERE NOT ()-[:SUB_CATEGORY]->(n) AND toLower(part.name) STARTS WITH toLower('atm')
WITH COLLECT(p) AS ps
RETURN ps

над запросом шифра возвращает фактический набор результатов, т. Е. Он показывает все отношения как SUB_CATEGORY и TAGGED_TO

enter image description here

Теперь, если я использовал для преобразования этого в древовидную структуру с использованием процедуры APOC, он пропускает узел отношений TAGGED_TO родительского узла, т. Е. Drone

MATCH p=(n:Category)-[:SUB_CATEGORY*]->(m)<-[:TAGGED_TO]-(part:Part)
WHERE NOT ()-[:SUB_CATEGORY]->(n) AND toLower(part.name) STARTS WITH toLower('atm')
WITH COLLECT(p) AS ps
CALL apoc.convert.toTree(ps) YIELD value
RETURN value

Можете ли вы дать мне предложение получить узел TAGGED_TO всех узлов вместе с родительским узлом, используя APOC

1 Ответ

0 голосов
/ 06 сентября 2018

В первом запросе отображается отношение TAGGED_TO между родительским узлом Drone и узлом :Part, поскольку включена опция браузера Connect result nodes:

Если этот флажок установлен, после получения результата запроса шифра, второй запрос выполняется для извлечения отношений между результирующими узлами.

Но на самом деле в результате нет такой взаимосвязи, потому что шаблон соответствия не учитывает возможность пути с длинным нулем . Попробуйте это:

MATCH p=(n:Category)-[:SUB_CATEGORY*0..]->(m:Category)<-[:TAGGED_TO]-(part:Part)
WHERE NOT ()-[:SUB_CATEGORY]->(n) AND toLower(part.name) STARTS WITH toLower('atm')
WITH COLLECT(p) AS ps
CALL apoc.convert.toTree(ps) YIELD value
RETURN value
...