database - Neo4j:以特定的关系顺序查询两个节点之间的路径,并且只知道最后一个节点的标签
问题描述
例如,如果我有一个具有以下标签和关系的复杂图表:
N1-a->N2-b->N3-c->N4
N2-d-N5-e->N3
等等
现在,我想使用 Cypher 找到从 (:N1{id:'xyz'}) 到任何 N4 类型节点的路径,但我希望这些关系的顺序相同,即 a、b、c。
另外,如果没有 N3 类型的节点连接到 N4 类型的节点,我想返回 N3 之前的路径
我想知道是否有办法做到这一点。有人可以帮忙吗?我是 Neo4j 的新手
解决方案
如果您明确知道要遍历的关系,那么您应该能够使用 Cypher 执行此操作,但如果没有 N4 则返回 N3 的条件可能很棘手。
N3 的标签是否已知,或者您只是想要尽可能多的路径?此外,如果沿路径而不是在末端遇到标签 N4 的节点,您是否也想要这些节点,或者您只对关系链末端的 N4 感兴趣?
此外,您是否对找到的所有可能路径感兴趣,或者您只需要一条路径(如果存在)?
如果您明确知道(并且可以在查询中定义)要遍历的关系,并且如果您只需要一条路径(如果存在)并且您只对末尾标签 N4 的节点感兴趣,则此查询应该可以工作(或之前的节点,如果最后没有 N4):
MATCH p=(:N1{id:'xyz'})-[:a]->()-[:b]->()-[:c*0..1]->(last)
WHERE length(p) = 3 and last:N4 OR length(p) = 2
WITH p
ORDER BY length(p) DESC
LIMIT 1
RETURN p
如果条件更复杂,您可能需要为此使用 APOC 路径扩展程序。
推荐阅读
- c# - 使用存储过程检查在 ASP.NET 中插入是否成功
- angular - 获取 AppComponent ViewContainerRef
- php - 在 Laravel 中创建新的管理员用户
- winapi - Windows 10:GetSysColor() 没有获得深色 ui 颜色主题
- python - 试图以某种复杂的方式用 Pandas 总结行
- c# - .NET 应用程序的 C++/CLI 程序集
- dart - ~ 在 Dart 中是什么意思?
- hadoop - master在datanode上运行是否正确?
- angular - 选择组件时忽略部分路由的角度路由
- python - 子进程 Popen 运行 python 命令