【发布时间】:2021-04-28 06:57:12
【问题描述】:
我需要能够按顶点类型过滤 arangodb 图遍历。有两种顶点类型,比如说 vA 和 vB。只有一种边,可以连接 _to 和 _from 任一类型的顶点。
vA 有一个带有数值的属性“pfi”。 vB 有一个属性“别名”,它是几个属性/值对整数作为字符串的字典(文档):整数。 integer-as-string 属性包含与 vA 中的 pfi 属性相同类型的数据/数字。
我从每个起始顶点 p0(在查询的前面确定)开始。每个p0都有属性“零点id”和“pfi”。
我需要在出站方向遍历,并且只保留 vA 类型的所有顶点都具有与 p0.pfi 匹配的“pfi”的路径,并且所有 vB 类型的顶点都具有与 pfi 匹配的“别名”属性.
FOR p0 in points
FOR v, e, p IN 1..5 OUTBOUND p0['zero point id'] GRAPH 'grph'
FILTER p.vertices[*]['pfi'] ALL == p0['pfi']
OR p.vertices[*]['aliases'][TO_STRING(p0['pfi'])] NONE == null
RETURN {
'pfi': p0['pfi']
, 'vertices': p.vertices
, 'edges': p.edges
}
我在上面尝试了几种语法变体,都具有相同的行为:如果我删除过滤器,我会得到所有(未过滤的)路径,而过滤器的结果是空的。我认为这是因为所有路径都包含两种顶点类型,而 OR 的逻辑并不意味着任何一个条件都可以为真,任何单个顶点都可以通过。
我该如何表达,以便第一个条件适用于 vA 类型,而第二个条件适用于 vB 类型?
【问题讨论】: