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->b
或 b->c
)
假设我们有这个简单的模式:
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->b
或 b->c
)