neo4j - 使用条件边类型遍历 neo4j 图
问题描述
我有一个固定的数据库,其中的节点通过六种不同类型的关系连接人和边缘。为了简单起见,我在这篇文章中将关系类型称为 A、B、C、D、E 和 F。这些关系都不是定向的。新的语法,所以谢谢你的帮助。
我需要获取基于条件路径 A 到(B 或 CD)到 E 到 F 的遍历图的关系集。所以这意味着我首先需要链接两个节点的关系 ()-[:A]-( ),但后来我对如何表达条件关系感到困惑。要到达下一个节点,我需要 B 或 C,然后是 D,因此它是 ()-[:B]-() 或 ()-[:C]-()-[:D]-()。如何在 MATCH 语法中表达这种条件遍历?
尝试了所有这些并得到了语法错误:
(node2:Node)-[rel2:B|rel3:C]-(node3:Node)
(node2:Node)-[rel2:B]OR[rel3:C]-(node3:Node)
解决方案
这个纯密码查询应该返回所有匹配的路径:
MATCH p=()-[:A]-()-[r:B|C|D*1..2]-()-[:E]-()-[:F]-()
WHERE (SIZE(r) = 1 AND TYPE(r[0]) = 'B') OR
(SIZE(r) = 2 AND TYPE(r[0]) = 'C' AND TYPE(r[1]) = 'D')
RETURN p
该[r:B|C|D*1..2]
模式匹配 1 或 2 个具有 、 和/或 类型的关系B
(C
其中D
可能包含您不想要的子路径);并且该WHERE
子句过滤掉您不想要的子路径。
推荐阅读
- openid-connect - 使用 Rest API 对 Okta OpenID 连接进行身份验证
- laravel - 未定义变量:行(查看:resources\views\admin\category\show.blade.php)
- xamarin - 我们如何从 imageToUpload.Source 接收图像文件并传递给另一个方法
- javascript - 停止在每次渲染时调用函数
- python - 按索引上的函数过滤熊猫数据帧
- javascript - 如何从threejs应用程序中导出变形网格?
- php - 如何在 Laravel 中使用 required_if 验证?
- android - 在 Android 应用程序中使用 MangoDb
- scala - 在 Scala 中将中缀转换为后缀表示法
- python-3.x - 使用 Selenium 抓取(Python)时只有第一行