【问题标题】:With arangodb AQB how do you get out/inEdges an from/toVertices? in a query?使用 arangodb AQB,您如何从/到顶点退出/进入边缘?在查询中?
【发布时间】:2016-07-09 20:29:46
【问题描述】:

假设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,但我没有看到任何有助于上述查询的内容

【问题讨论】:

    标签: arangodb graph-traversal


    【解决方案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 的期望。

    【讨论】:

      【解决方案2】:

      你说得对,这不能在 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()
      

      【讨论】:

        猜你喜欢
        • 2018-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-27
        • 2016-12-14
        • 1970-01-01
        相关资源
        最近更新 更多