Рассмотрим
- Drone (Parent)
- Quadcropter (Child)
- Pixel (Grand Child)
- Quadcropter (Child)
с [: SUB_CATEGORY] в качестве узла отношения
под запросом 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
вышеупомянутый запрос cypher возвращает фактический набор результатов, то есть показывает все отношения как SUB_CATEGORY, так и TAGGED_TO
Теперь, если я преобразовывал это в древовидную структуру с помощью процедуры 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