ArangoDB图遍历中如何排除经过特定节点的路径
解决ArangoDB图遍历中排除经过特定节点的路径问题
我懂你的问题了——你原来的过滤条件只盯着最终到达的节点v,但execute1是路径里的中间节点,所以那个v.name != "execute1"根本没法过滤掉包含它的路径,这就是为啥两条路径还都返回了。
要实现“排除所有经过特定节点的路径”,你得检查整个路径上的所有节点,而不是只看最后一个终点。这里可以用ArangoDB的NONE(或者NOT ANY)运算符来遍历路径的顶点集合,确保里面没有你要排除的节点。
给你修改后的查询:
FOR v, e, p IN 1..10 OUTBOUND 'Node/start_0' Path OPTIONS { bfs: true} FILTER (v.name == "end" OR v.name == "error") AND NONE x IN p.vertices[*].name FILTER x == "execute1" RETURN CONCAT_SEPARATOR(' - ', p.vertices[*].name)
逻辑解释:
- 第一个
FILTER保持不变,确保我们只保留终点是end或error的路径; - 第二个条件
NONE x IN p.vertices[*].name FILTER x == "execute1"会检查路径上的所有节点名称,只有当没有任何一个节点是execute1时,这条路径才会被保留; - 你也可以把
NONE换成NOT ANY,效果完全一致:NOT ANY x IN p.vertices[*].name FILTER x == "execute1"。
这样修改后,查询就会只返回你想要的那条start - decide - execute2 - end路径啦。
内容的提问来源于stack exchange,提问作者krishna
相关产品推荐
相关产品推荐

