AQL的修剪:如何组合条件?

时间:2019-05-21 14:19:30

标签: arangodb aql

我正在运行ArangoDB 3.4.5,并且一直在使用PRUNE语句。在合并条件时遇到一些困难。

假设我的路径v上的某些顶点p具有整数属性ia,而某些v具有布尔属性ba。甚至沿v沿p的索引p.vertices[2]也具有ba

PRUNE HAS(v, "ia") AND v.ia != 5 自己工作。 PRUNE p.vertices[2].ba == false OR p.vertices[4].ba == false 也可以单独工作。

我观察到,我无法通过多个PRUNE语句或将它们放在一个查询中将它们组合到一个查询中 PRUNE (condition_1) OR (condition_2)。另外,我不能在PRUNE中放置一个,而在FILTER中放置另一个。 还有其他人正在经历这种情况吗,或者仅仅是我吗?

1 个答案:

答案 0 :(得分:1)

我无法在ArangoDB 3.4.5中重现您的问题 如果您创建集合edgevertex并用示例树填充它们:

FOR n in 0..100000
  INSERT {_key: TO_STRING(n), val: n, modulo: n%2} INTO vertex
  FILTER n > 0
  INSERT {_from: CONCAT("vertex/", FLOOR((n-1)/2)), _to: NEW._id} INTO edge

现在我遍历:

WITH vertex
FOR v,e,p IN 0..5 OUTBOUND "vertex/0" edge
    RETURN TO_STRING(p.vertices[*].val)

结果:

   [
  "[0]",
  "[0,1]",
  "[0,1,3]",
  "[0,1,3,7]",
  "[0,1,3,7,15]",
  "[0,1,3,7,15,31]",
  "[0,1,3,7,15,32]",
  "[0,1,3,7,16]",
  "[0,1,3,7,16,33]",
  "[0,1,3,7,16,34]",
  "[0,1,3,8]",
  "[0,1,3,8,17]",
  "[0,1,3,8,17,35]",
  "[0,1,3,8,17,36]",
  "[0,1,3,8,18]",
  "[0,1,3,8,18,37]",
  "[0,1,3,8,18,38]",
  "[0,1,4]",
  ...

接下来,我将"stop": true"hide": 1添加到顶点_key: 7,并将其他一些组合添加到顶点17和18。现在,如果满足条件,则PRUNE应该停止遍历。注意,顶点本身包含在结果中。

WITH vertex
FOR v,e,p IN 0..5 OUTBOUND "vertex/0" edge
  PRUNE v.hide == 1 AND v.stop == true
RETURN TO_STRING(p.vertices[*].val)

结果:

[
  "[0]",
  "[0,1]",
  "[0,1,3]",
  "[0,1,3,7]", <-- stop: true, hide: 1
  "[0,1,3,8]",
  "[0,1,3,8,17]", <-- stop: true, hide: 1
  "[0,1,3,8,18]",
  "[0,1,3,8,18,37]",
  "[0,1,3,8,18,38]", 
   ...

PRUNE条件可以使用AND / OR,但仅支持一种PRUNE条件(与FILTERS相反)。