【问题标题】:Can't declare a variable in ArangoDB无法在 ArangoDB 中声明变量
【发布时间】:2019-08-20 14:55:44
【问题描述】:

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

根据教程的第一步,您应该将边缘保存到变量中。就我而言,声明如下所示:

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)

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

【问题讨论】:

    标签: nosql arangodb aql


    【解决方案1】:

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

    来自AQL Syntax documentation

    AQL 查询必须返回一个结果(通过使用 RETURN 关键字)或执行数据修改操作(由 使用关键字 INSERT、UPDATE、REPLACE、REMOVE 或 UPSERT)。如果 AQL 解析器检测到超过 同一查询中的一个数据修改操作,或者如果它不能 确定查询是数据检索还是 修改操作。

    使用本教程中所述的完整 AQL 块,执行按预期工作,因为在这种情况下,查询正在使用 REMOVE 执行数据修改。仅在 LET 变量声明中的 RETURN 操作不足以运行 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
    

    【讨论】:

      猜你喜欢
      • 2020-08-17
      • 2011-12-26
      • 1970-01-01
      • 2012-12-26
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多