繁体   English   中英

Neo4j:带有密码的某些节点的过滤路径

[英]Neo4j : Filtering path with some nodes with cypher

我想要A:Alpha和D:Alpha之间的所有路径,而这两个之间只有:Beta节点。 如果路径包含相同类型或其他类型的节点,则应丢弃那些路径。

Sample data - 
A:Alpha->B:Beta->C:Beta->D:Alpha
A:Alpha->M:Beta->Z:Gama->P:Beta->D:Alpha
A:Alpha->S:Beta->F:Beta->I:Beta-->D:Alpha
A:Alpha->U:Beta->X:Alpha->T:Alpha->W:Beta->D:Alpha

Result should be - 
A:Alpha->B:Beta->C:Beta->D:Alpha
A:Alpha->S:Beta->F:Beta->I:Beta-->D:Alpha

有人可以帮我同样的密码吗?

谢谢

您只需要一个变长路径和WHERE all()谓词来限制路径中间节点的标签:

... // assume 'path' variable used in the match
WHERE all(node in nodes(path)[1..-1] WHERE node:Beta)
...

或者,您可以使用APOC Procedures ,因为路径扩展器的选项应该能够传递您想要的内容:

MATCH (a:Alpha)
CALL apoc.path.expandConfig(a, {relationshipFilter: '>', labelFilter:'/Alpha|+Beta' filterStartNode:false}) YIELD path
RETURN path

标签过滤器是这里的关键。 /Alpha在:Alpha节点上创建终止节点过滤器,这意味着路径将仅遍历到遇到的第一个:Alpha节点,并且不会越过,返回的路径始终以Alpha节点结尾。 +Beta在:Beta节点上为路径中的节点创建白名单过滤器(当我们使用终止过滤器时,该白名单过滤器不适用于终端节点),而filterStartNode:false表示起始节点不受白名单过滤器的约束无论是。

这样可以确保路径仅到达第一个:Alpha节点,并且路径中的所有中间节点都必须是:Beta节点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM