neo4j Cypher ЕСЛИ ПОСЛЕ ЭТОГО - PullRequest
       3

neo4j Cypher ЕСЛИ ПОСЛЕ ЭТОГО

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

Мне нужно прочитать файл json, имеющий следующую структуру:

{
    "source":"source name",
    "target":"target name",
    "targettype":"targettype",
}

Исходный и целевой узлы уже загружены в мой график. И у них есть четкие ярлыки. Имена целей не являются уникальными, но каждый дубликат будет связан с различным целевым типом

. Затем существуют две различные группы целевых узлов: те, которые имеют тип, и те, которые не имеют типа; на графике эти узлы имеют различные метки, обратите внимание, что когда узел не имеет типа, значение json для targettype равно null

Файл json предназначен для загрузки отношений между источником и целью используя имя

Я довольно растерялся, как этого добиться. Поскольку мне нужно, ЕСЛИ ДРУГОЕ, ПРОЧИТАЙТЕ, ЧТОБЫ ИСПОЛЬЗОВАТЬ два FOREACH (ignoreme), за которыми следует MATCH, но это не разрешено .....

Псевдокод будет

LOAD lines from json
WITH blah blah blah
UNWIND blah blah blah
IF targettype is NULL THEN
  MATCH (n:source_name)--(sourcetype)
  MATCH (m:NULL_TARGET_LABEL target_name)
ELSE
  MATCH (n: source_name)--(sourcetype)
  MATCH (m:NON_NULL_TARGET_LABEL target_name)--(targettype)
END
MERGE (n)-[:TIGHT_IT_TO]_(m)
RETURN *

1 Ответ

3 голосов
/ 13 февраля 2020

Процедура APO C апо c .do.when должна быть полезной. Например:

...
MATCH (n:source_name)--(sourcetype)
CALL apoc.do.when(
  targettype is NULL,
  "MATCH (m:NULL_TARGET_LABEL {name: target_name}) RETURN COLLECT(m) AS ms",
  'MATCH (m:NON_NULL_TARGET_LABEL {name:target_name})--(targettype) RETURN COLLECT(m) AS ms',
  {target_name:target_name, targettype:targettype}) YIELD value
UNWIND value.ms AS m
MERGE (n)-[:TIGHT_IT_TO]-(m)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...