AQL 更新在收集循环中成功,但在图形遍历中引发未找到错误



我正在尝试弄清楚如何使用arangodb中的图形遍历查询来更新边缘文档。我能够使用标准做到这一点FOR e IN collectionName UPDATE e with {newProps} IN collectionName.但是,我无法弄清楚我尝试使用FOR v, e, p IN 1..5 OUTBOUND @startId GRAPH @graphName语法。

我在macOS Mojave 10.14.3上使用arangodb:latest docker镜像,并且使用arango的go库(github.com/arangodb/go-driver)通过构建查询字符串并使用Database.Query()函数发送来进行查询。我已经尝试只返回我尝试更新的边缘的密钥(即只返回e._key而不是尝试在下面的查询中更新),并使用 arangosh 验证这确实是我尝试更新的边缘的正确键。此外,如上所述,我已经能够使用关系 AQL 语法更新边缘。

这是我的查询:

FOR v, e, p IN 1..5 OUTBOUND @startId GRAPH @graphName
FILTER e.@key0 == @val0
UPDATE e._key WITH {@propName0: @propValue0} IN has_skill
RETURN {new: NEW, old: OLD}

这是我的绑定变量:

[graphName:Matthew_Loughney, key0:_from, propName0:testProp, propValue0:testVal, startId:applicant/232, val0:applicant/232]

我希望当我使用 arangosh 查看has_skill集合时,我会看到我的边缘现在有一个属性testProptestVal;但是,我只是得到错误AQL: document not found (while executing)并且我的边缘保持不变。

事实证明,我的过滤器返回了一些不在has_skill集合中的边缘(确切地说是总共 4 条),所以当它尝试在has_skill中更新时,它为我想要的那个成功了,但对其他 3 个失败了,并且由于 UPDATE 操作是原子的,因此它对所有边缘都失败了。我没有注意到这一点,因为我在查看键时只查看返回的第一个边缘,这在我的FOR e IN collectionName查询中不是问题,因为显然它们都在正确的集合中,因此只返回了我正在寻找的 1 条边缘。

最新更新