cypher - CYPHER 获取节点之间的边
问题描述
我目前有一个图表,其中包含具有 Id 的路线,并且需要找到 A 和 E 之间的所有路线。我不需要做最短路径,因为所有路线都有 Id。
我目前运行多个查询,并希望一次完成。
获取连接到 A (1,2,3) 的所有边
MATCH (n:Node {Id: "A"})-[s:Edge]->(:Node) RETURN s.Id
获取连接到 E (1,3) 的所有边
MATCH (:Node)-[s:Edge]->(n:Node {Id: "E"}) RETURN s.Id
将 ID 保留在匹配的位置 (1,2)
检索 id 匹配的所有边。
对于 ID 匹配匹配的每个结果 (s:Node)-[e:Edge {Id: id})->(e:Node) 返回全部
(1)A -> B -> C -> D -> E
(2)A -> B -> C -> D -> E
这可以在一个查询中完成吗?我有一种 UNWIND 参与的感觉,我也找不到如何做一个 LEFT INNER JOIN 来做到这一点。
示例:如果我想要 A 和 E 之间的所有路线,它应该返回 2。如果我想要 A 和 D 之间的所有边,它应该返回 3。
Node {
string Id;
}
Edge {
long Id;
}
解决方案
这里最困难的部分是“所有 rel id 都相同”,但这里是如何通过抓取路径中的第一个关系并将其与其余关系进行比较来进行检查。
MATCH p=(start{id:'A'})-[*..10]->(end{id:'E'})
WHERE ALL(r in RELATIONSHIPS(p) WHERE r.id=HEAD(RELATIONSHIPS(p)).id)
RETURN p
推荐阅读
- image - 从激光雷达数据生成反射率和距离图像
- javascript - 存储 react 原生回调函数
- performance - 从 Vue 方法内部多次调用计算属性是否会影响性能?
- javascript - 投射时jsLint奇怪的分配错误
- elasticsearch - 无法在我的机器中启动 ElasticSearch,执行 elasticsearch.bat 时发生 StartupException
- javascript - 从源访问 XMLHttpRequest 已被阻止(CORS 错误)
- angular - 按顺序处理请求
- jquery - 如何在页面加载或单击按钮时设置条件
- asp.net-core - 为什么我的 JQuery 自定义数据验证不会在提交时执行?
- spring-boot - 如何处理 Kafka Consumer 中的错误