使用arangodb AQB,你如何从/向维护中获得/ inEdges?在查询中?

时间:2016-07-09 20:29:47

标签: arangodb graph-traversal

假设来自fluent query interface的以下查询已从v3.x移除:

var tens = graph._vertices(lst).outEdges().restrict("knows").toVertices()
.inEdges().restrict("works").fromVertices().inEdges().restrict("owns")
.fromVertices().toArray();

这里lst只是一个从先前查询中获得的顶点列表, 并且lst中的顶点可以具有其中一个的外边缘关系 属于knows类型,这些outEdges指向的顶点依次具有works类型的传入边,

如何用AQB写这个?这两个(AQB和fluent query interface应该重叠,这就是为什么一个被删除)。 我查看了文档on github,但我没有看到任何有助于查询的内容,如上所述

2 个答案:

答案 0 :(得分:1)

这是我到目前为止所做的工作:

db._query("FOR vrt0 in @lst FOR vrt1  in OUTBOUND vrt0 knows FOR vrt2 in 
INBOUND vrt1 works  FOR vrt3 in INBOUND vrt2 owns RETURN vtr3",{"@lst": lst });

检索到的信息等同于我对相应fluent query interface的期望。

答案 1 :(得分:1)

你说这是无法在AQB中表现出来的。我们目前正在弃用AQB,转而支持JavaScript驱动程序(arangojs)和ArangoDB 2.8及更高版本支持的aql模板处理程序:https://docs.arangodb.com/3/Manual/Appendix/JavaScriptModules/ArangoDB.html#the-aql-template-string-handler

使用模板字符串处理程序,可以在ArangoDB 3中编写任意AQL查询。如果我理解正确,您的流畅查询应转换为以下内容:

db._query(aql`
  FOR vertex IN ${lst}
  FOR v1 IN OUTBOUND vertex knows
  FOR v2 IN INBOUND v1 works
  FOR v3 IN INBOUND v2 owns
  RETURN v3
`).toArray()