假设我有两个节点并想在它们之间找到路径,我可以使用以下密码。
MATCH(a{ActivityId:"abc"}),(b{ActivityId:"def"}),p=((a)-[x *..15]->(b))
return p
如果我希望将路径限制为具有某些属性的路径,例如x.special=true
,我将如何实现这一目标?
具体来说,此查询给出了结果(没有最大长度限制)
MATCH(a{ActivityId:"A3040", ProjectId:"AB.BC"}),(b{ActivityId:"HNP-L0-CON2-A1190",ProjectId:"AB.BC"}),p=((a)-[*{Critical:true}]->(b))
RETURN p
虽然这不是
MATCH(a{ActivityId:"A3040", ProjectId:"AB.BC"}),(b{ActivityId:"HNP-L0-CON2-A1190",ProjectId:"AB.BC"}),p=((a)-[xs*..15]->(b))
WHERE all(x IN xs WHERE x.Critical)
RETURN p
答案 0 :(得分:3)
这三种方法都应该有效:
MATCH p=((a {ActivityId: "A3040", ProjectId:"AB.BC"})-[*..15 {Critical: true}]->(b {ActivityId:"HNP-L0-CON2-A1190", ProjectId:"AB.BC"}))
RETURN p
MATCH p=((a {ActivityId: "A3040", ProjectId:"AB.BC"})-[*..15]->(b {ActivityId:"HNP-L0-CON2-A1190", ProjectId:"AB.BC"}))
WHERE ALL(r IN RELATIONSHIPS(p) WHERE r.Critical)
RETURN p
MATCH p=((a {ActivityId: "A3040", ProjectId:"AB.BC"})-[xs *..15]->(b {ActivityId:"HNP-L0-CON2-A1190", ProjectId:"AB.BC"}))
WHERE ALL(r IN xs WHERE r.Critical)
RETURN p
答案 1 :(得分:2)
您可以在关系中使用all
predicate:
MATCH p=((a {ActivityId: "abc"})-[*..15]->(b {ActivityId:"def"}))
WHERE all(n IN nodes(p) WHERE n.Critical)
RETURN p
答案 2 :(得分:1)
您可以使用length
功能过滤结果。
length()返回路径的长度。
MATCH (a{ActivityId:"A3040", ProjectId:"AB.BC"})
,(b{ActivityId:"HNP-L0-CON2-A1190",ProjectId:"AB.BC"})
,p=((a)-[*{Critical:true}]->(b))
WHERE length(p) < 15
RETURN p