Neo4j从节点开始找到重复模式

时间:2018-02-27 17:16:49

标签: design-patterns neo4j cypher relation repeat

我目前正在使用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

但这只会返回模式:NODE_A-RELATION_A->NODE_B-RELATION_B->NODE_A

如果我遗漏WHERE id(a) = 1它会得到正确的结果,但它会返回与该模式匹配的所有节点。

如何指定从中执行查询的起始节点?

1 个答案:

答案 0 :(得分:2)

您可能需要查看APOC程序,因为目前还没有一种方法可以在Cypher中定义重复的节点标签或关系类型序列。

我们实际上刚刚将such a feature添加到了APOC' 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

这将从您的起始节点扩展,重复节点标签和关系的序列。