Neo4j匹配路径排除具有特定标签的节点

时间:2016-04-06 01:13:13

标签: neo4j

我在neo4j中检索路径时遇到问题,排除某些标签。

敌人的例子,我有

               -->(h)-->(j)
              /
(a)-->(b)-->(c)-->(d)-->(i)
        \           
         -->(f)-->(g)
带有h节点的

标签为Deleted

我有查询

MATCH path = (n)-[*]->(child) where id(n)={id of node a} and NOT child:Deleted RETURN path

然后我希望此查询返回完整路径但排除节点h的子树,因为节点hDeleted

返回树应该像

(a)-->(b)-->(c)-->(d)-->(i)
        \           
         -->(f)-->(g)

但查询似乎无效。

任何人都可以帮助我。

由于

3 个答案:

答案 0 :(得分:4)

对我有用的是对路径中节点的列表理解:

MATCH path = ()-[*]->()
WHERE NONE(n IN nodes(path) WHERE n:Deleted)
RETURN path

答案 1 :(得分:2)

您可以使用APOC Procedures,使用路径扩展器功能和黑名单,以防止在遍历期间扩展到黑名单中带有标签的节点。

match (a)
where id(a) = {id of node a}
call apoc.path.expandConfig(a, {labelFilter:'-Deleted'}) yield path
return path

答案 2 :(得分:-2)

您需要检查两个节点的标签:

match p=((a)-[r:NEXT]->(b))
where  not (a:Deleted or b:Deleted)
return p

这是另一个例子:

match (a)-[r:NEXT]->(b) 
where  not (("Deleted" in labels(a)) or
            ("Deleted" in labels(b))) 
return a, r, b