Neo4j 查找从节点开始的重复模式
Neo4j find repeating pattern starting from node
我目前正在使用 Neo4j 并尝试构建适合我的用例的 Cypher 查询。我有一个具有以下结构的图表。
(NODE_A)-RELATION_A->(NODE_B)-RELATION_B->(NODE_A)-RELATION_A->
... 重复 ...
我知道第一个 NODE_A 并且想要每个后续 NODE_A 和 NODE_B 匹配两个关系(RELATION_A 和 RELATION_B)。如果我构造一个密码查询,它看起来像这样。
MATCH (a:NODE_A)-[:RELATION_A]->(b:NODE_B)-[:RELATION_B]-(c:NODE_A) WHERE id(a)=1 RETURN [a,b,c] as result
但这只是 returns 作为模式的结果:NODE_A-RELATION_A->NODE_B-RELATION_B->NODE_A
如果我省略 WHERE id(a) = 1
它会得到正确的结果,但随后它会 returns 所有与模式匹配的节点。
如何指定执行查询的起始节点?
您可能需要查看此处的 APOC 程序,因为目前没有一种方法可以仅在 Cypher 中定义节点标签或关系类型的重复序列。
我们实际上只是添加了 such a feature to APOC's path expander procedures。
使用你的案例,用法如下:
MATCH (a:NODE_A)
WHERE id(a) = 1
CALL apoc.path.expandConfig(a, {sequence:'NODE_A, RELATION_A>, NODE_B, RELATION_B>'}) YIELD path
RETURN collect(last(nodes(path))) as results
这将从您的起始节点展开,重复节点标签和关系的顺序。
我目前正在使用 Neo4j 并尝试构建适合我的用例的 Cypher 查询。我有一个具有以下结构的图表。
(NODE_A)-RELATION_A->(NODE_B)-RELATION_B->(NODE_A)-RELATION_A->
... 重复 ...
我知道第一个 NODE_A 并且想要每个后续 NODE_A 和 NODE_B 匹配两个关系(RELATION_A 和 RELATION_B)。如果我构造一个密码查询,它看起来像这样。
MATCH (a:NODE_A)-[:RELATION_A]->(b:NODE_B)-[:RELATION_B]-(c:NODE_A) WHERE id(a)=1 RETURN [a,b,c] as result
但这只是 returns 作为模式的结果:NODE_A-RELATION_A->NODE_B-RELATION_B->NODE_A
如果我省略 WHERE id(a) = 1
它会得到正确的结果,但随后它会 returns 所有与模式匹配的节点。
如何指定执行查询的起始节点?
您可能需要查看此处的 APOC 程序,因为目前没有一种方法可以仅在 Cypher 中定义节点标签或关系类型的重复序列。
我们实际上只是添加了 such a feature to APOC's path expander procedures。
使用你的案例,用法如下:
MATCH (a:NODE_A)
WHERE id(a) = 1
CALL apoc.path.expandConfig(a, {sequence:'NODE_A, RELATION_A>, NODE_B, RELATION_B>'}) YIELD path
RETURN collect(last(nodes(path))) as results
这将从您的起始节点展开,重复节点标签和关系的顺序。