Arangodb AQL&x27;s PRUNE:如何组合条件?
我正在运行ArangoDBArangodb AQL&x27;s PRUNE:如何组合条件?,arangodb,aql,Arangodb,Aql,我正在运行ArangoDB3.4.5,并且一直在使用PRUNE语句。我在组合条件时遇到了一些困难 假设路径p上的一些顶点v具有整数属性ia,而一些v具有布尔属性ba。甚至沿着p索引v,例如p。顶点[2]都有ba PRUNE有(v,“ia”)和v.ia!=5 它自己工作。 PRUNE p.vertices[2]。ba==false或p.vertices[4]。ba==false 它本身也可以工作 我注意到,我不能通过多个PRUNE语句或将它们放在一个查询中组合它们 修剪(条件1)或(条件2)。此外
3.4.5
,并且一直在使用PRUNE
语句。我在组合条件时遇到了一些困难
假设路径p
上的一些顶点v
具有整数属性ia
,而一些v
具有布尔属性ba
。甚至沿着p
索引v
,例如p。顶点[2]
都有ba
PRUNE有(v,“ia”)和v.ia!=5
它自己工作。
PRUNE p.vertices[2]。ba==false或p.vertices[4]。ba==false
它本身也可以工作
我注意到,我不能通过多个PRUNE
语句或将它们放在一个查询中组合它们
修剪(条件1)或(条件2)
。此外,我不能将一个放在PRUNE
语句中,将下一个放在FILTER
语句中。
还有其他人经历过这种情况吗?还是只有我
更新:
FILTER
和PRUNE
语句没有返回所需的结果,但是原因是缺少选项{uniqueEdges:“none”}
。与唯一顶点
相反,无
不是默认值。我无法在ArangoDB 3.4.5中重现您的问题
如果创建集合边
和顶点
,并使用示例树填充这些集合:
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]",
...
[
"[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]",
...
接下来,我将“stop”:true
和“hide”:1
添加到顶点\u键:7
,并将一些其他组合添加到顶点17和18。现在,如果条件满足,修剪应该停止遍历。请小心,结果中包含顶点本身
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]",
"[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]",
...
[
"[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]",
...
[
"[0]",
"[0,1]",
"[0,1,3]",
“[0,1,3,7]”,这看起来相当不错,类似于PRUNE(HAS(v,“ia”)和v.ia!=5)或(p.vertices[2]。ba==false或p.vertices[4]。ba==false)
应该按照您的期望进行操作。至少,如果对应的顶点包含与此条件匹配的任何此类属性。您将获得与修剪
条件匹配的顶点的路径,但不会检查更多的传出边。感谢您的帮助!我终于找到了我这边的问题。是什么导致了令人困惑的是,OPTIONS{uniquedges:“none”}
不是默认值,而OPTIONS{uniqueVertices:“none”}
是默认值。谢谢,这个例子证明了它是按设计工作的!我终于找到了问题所在。请参阅我之前的评论和更新。