Я изучаю шифр и пытаюсь найти способ создать динамические отношения, когда условие проходит. Вот пример:
у нас есть единственный узел:
(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" вместо того, чтобы брать тип из rel, поэтому оно выглядит следующим образом:
(n2) - [r] -> (ребенок)
Есть ли способ создать динамические отношения при определенных условиях?
У меня есть другая идея, но для этого потребуется продолжить выполнение запроса, даже если 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 ...]
На этот раз НЕОБЯЗАТЕЛЬНОЕ СООТВЕТСТВИЕ, и когда дочерний элемент имеет значение NULL, он возвращается и не требует вызова процедуры APOC. Однако я хотел бы продолжить другую часть запроса, например. создавать другие отношения. Есть ли способ добиться чего-то подобного?