Neo4j 递归函数
Neo4j Recursive function
我正在尝试使用 Neo4j Cypher 制作一个标签系统,但在制作递归函数时遇到了很多困难(过去 12 个小时都在敲我的脑袋)。
假设给定了一个 属性 的数组。
递归函数将:
1. 首先检查根是否有节点关系[:b] 与具有属性 'name' 值的节点作为数组中的第一个元素。
一个。如果是,只需将根设置为下一个元素并检查下一个节点是否具有 属性 'name 值作为数组中的第二个元素
b。否则,使用 属性 创建一个新节点并将该节点设置为根节点。
此查询将确保 names
parameter(字符串列表)中的名称由 Name
个节点按顺序链接在一起表示 [=13] =] 关系:
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']
,那么生成的路径将如下所示:
我正在尝试使用 Neo4j Cypher 制作一个标签系统,但在制作递归函数时遇到了很多困难(过去 12 个小时都在敲我的脑袋)。
假设给定了一个 属性 的数组。
递归函数将: 1. 首先检查根是否有节点关系[:b] 与具有属性 'name' 值的节点作为数组中的第一个元素。
一个。如果是,只需将根设置为下一个元素并检查下一个节点是否具有 属性 'name 值作为数组中的第二个元素
b。否则,使用 属性 创建一个新节点并将该节点设置为根节点。
此查询将确保 names
parameter(字符串列表)中的名称由 Name
个节点按顺序链接在一起表示 [=13] =] 关系:
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']
,那么生成的路径将如下所示: