go - AQL 更新在收集循环中成功但在图形遍历中抛出未找到错误

标签 go arangodb 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) 通过构建查询字符串并使用数据库发送它来进行查询.Query() 函数。我尝试只返回我尝试更新的边缘的 key (即只返回 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}

这是我的绑定(bind)变量:

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

我希望当我使用 arangosh 查看 has_skill 集合时,我会看到我的边缘现在有一个属性 testProp,其值为 testVal;然而,我只是收到错误 AQL: document not found (while executing) 并且我的优势保持不变。

最佳答案

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

关于go - AQL 更新在收集循环中成功但在图形遍历中抛出未找到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55599768/

相关文章:

go - 在赋值中使用文字作为类型

Golang括号语法解释

go - 练习: slice 实现图片

nosql - 我应该什么时候使用 AQL?

arangodb - Arango db在遍历图时生成面包屑

database - Arangodb 更新属性取决于边缘类型

当找不到值时,Gorm 返回空对象而不是默认对象

meteor - Sails.js 或 Meteor.js 是否与 ArangoDB 或 OrientDB 一起使用?

graph-theory - ArangoDB AQL 中的不相交子图

arangodb - 在 ArangoDB AQL 中,如何从图遍历中同时返回顶点和边?