Ряд условных предисловий, не выполняющих шифр neo4j - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь использовать FOREACH для условного оператора.Я передаю параметр $ hasLegs и, если значение равно 'Y' , я выполняю MERGE .Однако, похоже, что этого не требуется, поскольку вся операция обойдена и не выполняется.

Я пробовал метод FOREACH , используя APOC и используя С но пока не повезло.Может быть, это не моя неделя.

Пример Foreach:

MERGE (species:Species {name: $name})
  ON CREATE SET species.GUID = apoc.create.uuid(), species.creationDate = datetime()

WITH species
with species, $hasLegs as hasLegs
FOREACH (ignore IN CASE WHEN $hasLegs = 'Y' THEN [1] ELSE [] END | MERGE (species)-[:LINKS_TO]->(:Question:Root{type: 'Legs'}) )

RETURN species

Пример APOC

MERGE (species:Species {name: $name})
  ON CREATE SET species.GUID = apoc.create.uuid(), species.creationDate = datetime()
WITH species
MATCH (l:Question:Root{type: 'Legs')
CALL apoc.when(hasLegs='Y', 'MERGE (species)-[:LINKS_TO]->(l)','', { l:l, species: species }) YIELD value
WITH value AS ignored, species
RETURN species

Ожидаемый результат - просто, с параметрами: $ name , $ hasLegs .

$ name является MERGE для предотвращения дублирования узлов, однако $ hasLegs равно 'Y' или null .

(разновидности) - [: LINK_TO] -> (вопрос)

Anyпомощь очень ценится!Спасибо!

1 Ответ

1 голос
/ 19 сентября 2019

Ваш запрос, кажется, работает нормально, использование каждого из них правильное.

Однако он будет создавать новый узел Question при каждом его выполнении.Чтобы использовать уникальный узел Вопрос, используйте 2 MERGE предложения:

MERGE (q:Question:Root{type: 'Legs'}) MERGE (species)-[:LINKS_TO]->(q)

Весь запрос:

MERGE (species:Species {name: $name})
  ON CREATE SET species.GUID = apoc.create.uuid(), species.creationDate = datetime()
WITH species
with species, $hasLegs as hasLegs
FOREACH (ignore IN CASE WHEN $hasLegs = 'Y' THEN [1] ELSE [] END | MERGE (q:Question:Root{type: 'Legs'}) MERGE (species)-[:LINKS_TO]->(q) )
RETURN species
...