Neo4j递归函数

时间:2019-06-26 02:11:04

标签: neo4j cypher grandstack

我正在尝试使用Neo4j Cypher制作标签系统,并且很难(要花最后十二个小时来敲打我的头)来实现递归功能。

比方说,给出了一个属性数组。

递归函数将: 1.首先检查根节点是否具有节点关系[:b],并且该节点的属性为“名称”值作为数组中的第一个元素。

a。如果是,只需将根设置为下一个元素,然后检查下一个节点是否具有属性“名称值”作为数组中的第二个元素

b。否则,使用该属性创建一个新节点,并将该节点设置为根。

1 个答案:

答案 0 :(得分:0)

该查询将确保names parameter(字符串列表)中的名称由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