我正在运行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
中放置另一个。
还有其他人正在经历这种情况吗,或者仅仅是我吗?
答案 0 :(得分:1)
我无法在ArangoDB 3.4.5中重现您的问题
如果您创建集合edge
和vertex
并用示例树填充它们:
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相反)。