Neo4j 返回特定类型关系的图形(具有最大搜索深度限制)

Neo4j 返回特定类型关系的图形(具有最大搜索深度限制),neo4j,cypher,Neo4j,Cypher,假设我有两个节点,并希望在它们之间找到一条路径,我可以使用以下密码 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{Ac

假设我有两个节点,并希望在它们之间找到一条路径,我可以使用以下密码

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)-[xs*..15]->(b))
WHERE all(x IN xs WHERE x.Critical)
RETURN p
您可以在以下关系上使用:

MATCH p=((a {ActivityId: "abc"})-[*..15]->(b {ActivityId:"def"}))
WHERE all(n IN nodes(p) WHERE n.Critical)
RETURN p
您可以在以下关系上使用:

MATCH p=((a {ActivityId: "abc"})-[*..15]->(b {ActivityId:"def"}))
WHERE all(n IN nodes(p) WHERE n.Critical)
RETURN p
您可以使用函数筛选结果

length()返回路径的长度

匹配(a{ActivityId:“A3040”,ProjectId:“AB.BC”})
,(b{ActivityId:“HNP-L0-CON2-A1190”,项目:“AB.BC”})
,p=((a)-[*{Critical:true}]->(b))
其中长度(p)<15
返回p
您可以使用函数筛选结果

length()返回路径的长度

匹配(a{ActivityId:“A3040”,ProjectId:“AB.BC”})
,(b{ActivityId:“HNP-L0-CON2-A1190”,项目:“AB.BC”})
,p=((a)-[*{Critical:true}]->(b))
其中长度(p)<15
返回p

这三种方法都应该有效:


  • 这三种方法都应该有效:


  • 谢谢-我用这次尝试更新了问题(发帖前尝试时不起作用)我更新了答案,以便它检查节点上的属性。谢谢-我用这次尝试更新了问题(发帖前尝试时不起作用)我更新了答案,以便它检查节点上的属性。属性是节点上的还是关系上的?属性是关系上的。事实证明,我并没有得到任何重新过滤,因为并没有一条关键路径15或更少的边长。啊!属性是在节点上还是在关系上?属性是在关系上。事实证明,我并没有得到任何重新过滤,因为并没有一条关键路径15或更少的边长。啊!
    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
    
    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