несколько UNWIND обработка пустых списков - PullRequest
0 голосов
/ 27 июня 2018

Я хочу добавить узел Paper и раскрутить 2 списка a и t (если они не пусты), создать отношение (HAS_WRITTEN или HAS_KEYWORD) к каждому элементу каждого списка. Я получаю ошибку expected whitespace or a relationship pattern на MERGE (author:Author { name: a.name }). Мое использование UNWIND с CASE очень похоже на использование в документах

MERGE (n:Paper {name: "mystuff"})
WITH n,[{name:"john"}] AS a, [{name:"computer_stuff"}] AS t
UNWIND 
   CASE
      WHEN a = []
         THEN [null]
      ELSE 
          MERGE (author:Author { name: a.name })
          MERGE (author)-[:HAS_WRITTEN]->(n)
   END
WITH a
UNWIND 
   CASE
       WHEN t = [] THEN [null]
      ELSE 
          MERGE (topic:Topic { name: t.name })
          MERGE (n)-[:HAS_KEYWORD]->(topic)
   END

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

MERGE - это операция (не функция), и она не возвращает значение . Поэтому его нельзя использовать внутри предложения CASE.

Этот запрос должен делать то, что вы хотите:

WITH [{name:"john"}] AS authors, [{name:"computer_stuff"}] AS topics
MERGE (n:Paper {name: "mystuff"})
FOREACH(a IN authors |
  MERGE (author:Author { name: a.name })
  MERGE (author)-[:HAS_WRITTEN]->(n))
FOREACH(t IN topics |
  MERGE (topic:Topic { name: t.name })
  MERGE (n)-[:HAS_KEYWORD]->(topic))
0 голосов
/ 27 июня 2018

Нельзя использовать MERGE в операторе UNWIND CASE.

Думайте о UNWIND CASE как о выражении switch, когда вы выбираете значение, которое будет использоваться для части UNWIND. MERGE не является списком или нулем, поэтому это недопустимое значение.

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