无法在ArangoDB中声明变量

时间:2019-08-20 14:55:44

标签: nosql arangodb aql

我正在使用 ArangoDB 3.4.6-1 ,并且想在在线控制台中使用AQL(如here所述)删除顶点。

根据教程的第一步,应该将Edges保存到变量中。就我而言,该语句如下所示:

LET edgeKeys =  (FOR v, e, p IN 1..100 INBOUND 'Node/N3' GRAPH 'graph' RETURN e._key)

For本身不带括号会返回正确的结果:

[
  "E3"
]

但是,用括号将整个语句运行会引发以下错误:

Query: AQL: syntax error, unexpected end of query string near ')' at position 1:83 (while parsing)

我尝试将可比的命令与其他图形或其他返回值和对象一起使用,但始终会得到相同的错误。

到目前为止,我无法在线找到合适的解决方案。本教程提供了以下示例代码(复制为1:1):

LET edgeKeys = (FOR v, e IN 1..1 ANY 'persons/eve' GRAPH 'knows_graph' RETURN e._key)

我遇到了完全相同的错误,它甚至无法检查集合。 我在做什么错了?

1 个答案:

答案 0 :(得分:2)

仅使用LET定义变量不是有效的AQL语句。

来自AQL Syntax documentation

  

AQL查询必须返回结果(通过使用   RETURN关键字)或执行数据修改操作(由表示   关键字INSERT,UPDATE,REPLACE,REMOVE或   UPSERT)。如果AQL解析器检测到多个错误,则将返回错误。   同一查询中的一项数据修改操作,或者如果不能   弄清楚该查询是用于数据检索还是用于   修改操作。

由于本例中查询正在使用REMOVE执行数据修改,因此使用本教程中说明的完整AQL块可以按预期执行操作。仅RETURN变量声明内的LET操作不足以运行AQL查询。在删除LET操作时,查询也可以正常工作,因为在这种情况下,AQL查询直接返回结果。

完整的AQL查询:

LET edgeKeys = (FOR v, e IN 1..1 ANY 'persons/eve' GRAPH 'knows_graph' RETURN e._key)
LET r = (FOR key IN edgeKeys REMOVE key IN knows) 
REMOVE 'eve' IN persons

附加的RETURN也可以使查询工作:

LET edgeKeys = (FOR v, e IN 1..1 ANY 'persons/eve' GRAPH 'knows_graph' RETURN e._key)
RETURN edgeKeys