使用arangodb AQB,您如何获得出/入边和从/到顶点?在查询中?

n3schb8v  于 2023-09-28  发布在  Go
关注(0)|答案(2)|浏览(123)

假设以下来自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应该重叠,这就是为什么一个被删除)。Iv查看了文档on github,但我没有看到任何对上面的查询有帮助的东西。

ztmd8pv5

ztmd8pv51#

这就是我目前为止所做的:

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中期望的信息。

bmp9r5qi

bmp9r5qi2#

你是对的,这不能在AQB中表示。我们目前正在弃用AQB,以支持JavaScript驱动程序(arangojs)和ArangoDB 2.8及更高版本支持的aql模板处理程序:https://docs.arangodb.com/3.11/develop/javascript-api/@arangodb/#the-aql-template-tag
使用模板字符串处理程序,可以在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()

相关问题