Neo4J/Cypher: 是否可以过滤where子句中路径的长度?

Neo4J/Cypher: is it possibile to filter the length of a path in the where clause?

假设我们有这个简单的模式:

p=(a)-[r]-(b)

其中节点 a 和 b 已经在 WHERE 子句中设置了自己的属性(例如 a:Movie AND a.title = "The Matrix" AND b:Movie)。 我想在 WHERE 子句中添加另一个条件,例如

LEGHT(p) =2 OR LENGTH(p)>6

(语法不正确,我知道)

据我所知,可以在 MATCH 子句中使用语法 [r*min..max] 指定路径的长度,但这不包括我正在寻找的情况。

任何帮助将不胜感激 =)

这对你有用吗?

MATCH p=(a)-[r*2..]-(b)
WHERE LENGTH(r) = 2 OR LENGTH(r) > 6
RETURN p

请注意,对于大型数据库,此查询可能需要很长时间,或者无法完成,因为 MATCH 子句未设置路径长度的上限。

是的,这在 neo4j 中确实有效,正如您指定的那样。

示例数据:

create (a:Foo)-[:stuff]->(b:Foo)-[:stuff]->(c:Foo);

然后这个查询:

MATCH p=(x:Foo)-[:stuff*]->(y:Foo) 
WHERE length(p)>1 RETURN p;

Returns 只有 a->b->c 的两步路径,而不是一步路径(a->bb->c