我在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
的子树,因为节点h
为Deleted
。
返回树应该像
(a)-->(b)-->(c)-->(d)-->(i)
\
-->(f)-->(g)
但查询似乎无效。
任何人都可以帮助我。
由于
答案 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