как использовать размотку с входными параметрами в neo4j? - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь обработать этот запрос на шифре.Я хочу установить отношения между узлами.

Я пробовал с размоткой, foreach и другими вещами.Я пытался два дня, и я не знаю, как это сделать.

WITH 
 [
    {
      sender: 416,
      target: 400,
      bidirectional: true
    },
    {
      sender: 416,
      target: 509,
      bidirectional: true
    },
    {
      sender: 416,
      target: 413,
      bidirectional: true
    }
    ] as relationships
unwind relationships as relation
match (s),(t)
where id(s)=relation.sender and id(t)=relation.target
case relation.bidirectional
    when true
        merge (s)<-[:REL]->(t)
    else
        merge (s)-[:REL]->(t)

Я пробовал так много вещей, но не могу решить проблему здесь.Некоторые идеи?заранее спасибо

1 Ответ

0 голосов
/ 03 апреля 2019

Все отношения в neo4j являются однонаправленными.Если вам все равно, какое направление используется, MERGE позволяет вам пропустить направление из шаблона (или даже поставить стрелки в обоих направлениях - что немного странно и вводит в заблуждение), но будет создано только одно отношение(при необходимости) и было бы однонаправлено.Таким образом, флаг bidirectional совершенно не нужен - вы всегда можете иметь отношения, идущие в одном направлении.

Кроме того, выражение CASE не может выполнять чтение или запись в БД.

Этот запрос (который даже не нуждается в выражении CASE) имеет больше смысла и будет работать:

WITH 
 [
    {
      sender: 416,
      target: 400
    },
    {
      sender: 416,
      target: 509
    },
    {
      sender: 416,
      target: 413
    }
    ] as relationships
UNWIND relationships as relation
MATCH (s), (t)
WHERE id(s)=relation.sender AND id(t)=relation.target
MERGE (s)-[:REL]->(t)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...