Cypher Dynami c Взаимосвязь с условной процедурой APO C? - PullRequest
0 голосов
/ 13 марта 2020

Я изучаю шифр и пытаюсь найти способ создания динамических c отношений при выполнении условия. Вот пример:

у нас есть один узел:

(n2)

и другой узел, который имеет неизвестную связь TEMP_1 или TEMP_2 с его дочерний:

(n1) ------ [TEMP_1 или TEMP_2] ------> (дочерний)

мы хотим создать отношения между (n2) и (дочерний), если он существует

(n2) ------ [TEMP_1 или TEMP_2] ------> (дочерний)

Вот запрос:

MATCH (n1: NODE_1)
MATCH (n2: NODE_2)
OPTIONAL MATCH (n1)-[rel:TEMP_1|TEMP_2]->(child)
CALL apoc.do.when(child IS NOT NULL, "CREATE (n2)-[:r]->(ch) RETURN TRUE", "", {n2:n2, r:type(rel), ch:child}) YIELD value

Однако это создает мне отношение типа "r" вместо того, чтобы брать type из rel так это выглядит следующим образом:

(n2) - [r] -> (child)

Есть ли способ создания динамических c отношений на Speci c Условие?

У меня есть другая идея, но это потребовало бы продолжения выполнения запроса, даже если MATCH ничего не возвращает.

MATCH (n1: NODE_1)
MATCH (n2: NODE_2)
MATCH (n1)-[rel:TEMP_1|TEMP_2]->(child)
CALL apoc.do.when(child IS NOT NULL, "CREATE (n2)-[:r]->(ch) RETURN TRUE", "", {n2:n2, r:type(rel), ch:child}) YIELD value
...[other parts of query e.g. MATCH | CREATE ...]

Не существует необязательного СОВПАДАЙТЕ в этот раз, и когда child is NULL, он возвращается и не беспокоит вызов процедуры APO C Однако я хотел бы продолжить с другой частью запроса, например, создать другие отношения. Есть ли способ сделать sh что-то подобное?

1 Ответ

1 голос
/ 13 марта 2020

Функция apo c .create.relationship может создавать отношения с типом динамического c.

Кроме того, при обращении к ссылкам необходимо использовать префикс "$". параметр.

Например:

OPTIONAL MATCH (n1: NODE_1)-[rel:TEMP_1|TEMP_2]->(child)
CALL apoc.do.when(
  child IS NOT NULL,
  "MATCH (n2: NODE_2) CALL apoc.create.relationship(n2, $r, $ch) YIELD rel RETURN rel",
  "",
  {r:type(rel), ch:child}) YIELD value
...

Этот фрагмент получает n2 только при необходимости, что предполагает, что вам не нужно n2 позже в запросе.

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