我试图弄清楚如何使用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()函数。我尝试只返回要更新的边缘的密钥(即仅返回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
集合时,会看到我的边缘现在具有值为testProp
的属性testVal
;但是,我反而得到了错误AQL: document not found (while executing)
并且我的优势保持不变。
答案 0 :(得分:0)
原来,我的过滤器返回的边缘不在has_skill
集合中(准确的是共有4条),因此当它尝试在has_skill
中进行更新时,它成功地获得了我想要的边缘但对于其他3个失败,并且由于UPDATE操作是原子操作,因此对所有其他操作均失败。我没有注意到这一点,因为我只在查看键时才查看返回的第一个边缘,这在我的FOR e IN collectionName
查询中不是问题,因为显然这些都在正确的集合中,因此只返回了我一直在寻找的1条边。