Подключение «главного узла» с указанными c подузлами - PullRequest
0 голосов
/ 22 января 2020

Мы создаем несколько графиков на основе версий программы (в моем примере A, B)

(:ProgNode {compileUnit:RL105A, nodeKey:100, captureDate:1/1/1} )
(:ProgNode {compileUnit:RL105B}, nodeKey:200,captureDate:2/2/2} ) 

, эти вееры превращаются в полноценные графики с тысячами узлов. У нас также есть один узел (:ProgUnit{compileUnit:RL105}), который является «главным» узлом для этой программы. Мы хотим связать первый узел каждого отдельного подграфа (самый низкий nodeKey) с мастером. Мой текущий запрос выглядит так:

MATCH (p:ProgNode) where p.compileUnit = 'RL105A' WITH min(p.nodeKey) as low_node 
Match (j:ProgUnit) where j.compileUnit = 'RL105' 
Create (j)-[r:RELEASE]->(p)

A и B в конечном итоге будут датами, но на данный момент буквы

Это работает (вроде), но вместо того, чтобы связать мастер с подграфом, кажется, что создается новый узел, который не является ничем.

Я знаю, что мне придется выполнить это 2 раза, чтобы построить обе ссылки (A, B), и это не проблема.

Мысли? Что я здесь не так делаю?

1 Ответ

0 голосов
/ 23 января 2020

Ваше предложение WITH не включало p в качестве термина, поэтому p снова стало несвязанной переменной.

Следующий запрос должен создать отношение RELEASE к ProgNode, чей compileUnit начинается с "RL105", и у которого nodeKey имеет наименьшее значение:

MATCH (p:ProgNode) WHERE p.compileUnit STARTS WITH 'RL105'
WITH p ORDER BY p.nodeKey LIMIT 1
MATCH (j:ProgUnit) WHERE j.compileUnit = 'RL105'  
CREATE (j)-[:RELEASE]->(p)

Используйте MERGE вместо CREATE, если вам нужно избежать создания дублирующих отношений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...