Neo4j; Сложный запрос шифра - PullRequest
       4

Neo4j; Сложный запрос шифра

0 голосов
/ 06 февраля 2020

У меня следующая структура neo4j:

:Label1 -[:rel-label-1]- :Label2
It may happen that :Label1 -- :Label3
And sometime :Label2 -[:rel-label-2]- :Label3

Я хотел бы получить данные со следующей структурой таблицы

| LABEL1 | LABEL2 |   
|--------|--------| 

НО такой, что

IF исходящих данных нет: rel-label-2 из узла Label2 в таблице Lable 3 равен нулю, а узел Label2 будет встречаться только в строке

и

ЕСЛИ нет inbounding: rel-label-2, из узла Label3, в таблице Lable 2 имеет значение null, а узел Label3 будет встречаться только в строке

. Сейчас я просто могу производить декартово произведение на основе совпадение первой строки в структуре:

MATCH(n:Label1)--(:rel-label-1)--(z1:Label2)
Followed by the 2 optional Matches to retrieve :Label3 and :rel-label-2

Ниже приведен пример ожидаемого результата таблицы и шифра enter image description here

1 Ответ

1 голос
/ 07 февраля 2020

Вот одно из возможных решений. Он разбивает его на три части, сохраняет результаты каждой части в коллекции, а затем возвращает их в конце.

// find the blue and yellow with a direct conneciton
MATCH (b:Blue)--(y:Yellow)
WITH [b.name, y.name] AS pair
// keep them in a collection of pairs
WITH collect(pair) AS pairs

// find the blues connected to alpha and not a yellow
MATCH (b:Blue)<--(:Alpha)
WHERE NOT (b)--(:Yellow)
// add them to the pairs collection
WITH pairs + [[b.name, null]] AS pairs

// find the yellows connected to alpha and not a blue
MATCH (y:Yellow)<--(:Alpha)
WHERE NOT (:Blue)--(y)
// add them to the pairs collection
WITH pairs + [[null, y.name]] AS pairs

// unwind the collection
UNWIND pairs AS pair
RETURN pair[0] AS blue, pair[1] AS yellow
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...