尽管最小深度设置为 1,但仍包含 Arangodb AQL 起始顶点
Arangodb AQL start vertex included despite min depth set to 1
即使最小深度设置为 1,以下遍历始终 returns 起始顶点。我本以为只有当最小深度设置为 0 时才会返回起始顶点。
同样有趣的是 OPTIONS 函数不适用于所使用的过滤器(错误:位置 7:1 处 'OPTIONS { uniqueVertices: "path"...' 附近的意外标识符(解析时))。
如果我 运行 这是两个单独的查询,每个查询一个顶点和边,我得到预期的结果。
for v,e,p in 1..2
outbound 'X/14268273'
Edge
let Coll = (parse_identifier(v._id).collection)
filter Coll in (['A', 'B','C', 'D'])
//OPTIONS { uniqueVertices: "path" , bfs: false}
sort v.order
return p
你return p
,也就是起始顶点到当前节点的路径。最小深度不影响它。深度为 2..2
时,它将包括起始顶点以及深度为 1 的顶点以及它们之间的边。最小深度不会使其从路径中排除顶点或边。
然而,0 的最小深度将在 for 循环的第一次“迭代”中将起始顶点作为 v
和 null
作为 e
发出。任何更高的最小深度都会跳过这个。使用 1..2
作为深度会给你更多的路径,其中有较短版本的深度 2 路径,但起始顶点总是在 p.vertices[0]
.
关于遍历选项,语法是FOR … IN … OPTIONS
。您必须将独立的 LET
和 FILTER
操作放在属于遍历语言构造的 OPTIONS
之后。
如果你想过滤掉任何包含来自未指定集合的顶点的路径,那么你需要对路径上的所有顶点执行此操作,请使用 PRUNE
或即将推出的 vertexCollections
选项(3.7)。仅在 v
上过滤不会消除某些路径(深度 2 的路径,其中深度 2 的顶点来自集合 A、B、C 或 D,但深度 1 的顶点不是)。
即使最小深度设置为 1,以下遍历始终 returns 起始顶点。我本以为只有当最小深度设置为 0 时才会返回起始顶点。 同样有趣的是 OPTIONS 函数不适用于所使用的过滤器(错误:位置 7:1 处 'OPTIONS { uniqueVertices: "path"...' 附近的意外标识符(解析时))。 如果我 运行 这是两个单独的查询,每个查询一个顶点和边,我得到预期的结果。
for v,e,p in 1..2
outbound 'X/14268273'
Edge
let Coll = (parse_identifier(v._id).collection)
filter Coll in (['A', 'B','C', 'D'])
//OPTIONS { uniqueVertices: "path" , bfs: false}
sort v.order
return p
你return p
,也就是起始顶点到当前节点的路径。最小深度不影响它。深度为 2..2
时,它将包括起始顶点以及深度为 1 的顶点以及它们之间的边。最小深度不会使其从路径中排除顶点或边。
0 的最小深度将在 for 循环的第一次“迭代”中将起始顶点作为 v
和 null
作为 e
发出。任何更高的最小深度都会跳过这个。使用 1..2
作为深度会给你更多的路径,其中有较短版本的深度 2 路径,但起始顶点总是在 p.vertices[0]
.
关于遍历选项,语法是FOR … IN … OPTIONS
。您必须将独立的 LET
和 FILTER
操作放在属于遍历语言构造的 OPTIONS
之后。
如果你想过滤掉任何包含来自未指定集合的顶点的路径,那么你需要对路径上的所有顶点执行此操作,请使用 PRUNE
或即将推出的 vertexCollections
选项(3.7)。仅在 v
上过滤不会消除某些路径(深度 2 的路径,其中深度 2 的顶点来自集合 A、B、C 或 D,但深度 1 的顶点不是)。