Neo4j Рекурсивная функция - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь создать систему тегов с использованием Neo4j Cypher и очень тяжело (потратил последние двенадцать часов на то, чтобы ударить меня по голове), чтобы создать рекурсивную функцию.

Допустим, дан массив свойств.

Рекурсивная функция: 1. сначала проверит, имеет ли корень отношение узла [: b] с узлом, у которого значение свойства 'name' является первым элементом в массиве.

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

b.В противном случае создайте новый узел со свойством и установите этот узел в качестве корневого.

1 Ответ

0 голосов
/ 26 июня 2019

Этот запрос убедится, что имена в параметре names (список строк) представлены Name узлами, связанными вместе, по порядку, отношениями b:

MERGE (first:Name {name: $names[0]})
FOREACH(i IN RANGE(1, SIZE($names)-1) |
  MERGE (a:Name {name: $names[i-1]})
  MERGE (c:Name {name: $names[i]})
  MERGE (a)-[:b]->(c)
)

Первый MERGE существует для того, чтобы список names только с одним элементом по-прежнему вызывал создание одного узла (при необходимости).

Например, если параметр names равен ['aa','bb','cc'], то результирующий путь будет выглядеть следующим образом:

enter image description here

...