【问题标题】:How can I return all parents of a vertex in arango ql?如何在 arango ql 中返回顶点的所有父母?
【发布时间】:2019-12-05 15:58:58
【问题描述】:

我正在尝试编写一个 AQL 查询,该查询返回一个顶点的所有子节点以及该顶点本身。

例如我有这样的结构:

  A      B         C
  |      |         |
  D------          E     F

这是我的查询的样子:

for parent in collection
for child in outbound parent link
   RETURN{ parent, 
       child
    }

但它以表单的形式返回结果

"child": D
"parent": A

"child": D
"parent":B

"child": E
"parent": C

我期望的查询结果是这样的

"child": D
"parent": A, B

"child": E
"parent": C

"child": F
"parent": 

如何修改我的查询以获得结果?

【问题讨论】:

    标签: arangodb aql


    【解决方案1】:

    FOR parent IN VertexCollection FOR child IN OUTBOUND parent EdgeCollection COLLECT c = child.value INTO groups RETURN { child: c, parents: groups[*].parent }

    返回类似的东西。但也有文档详细信息。 [ { "child": "D", "parents": ["A", "B"] }, { "child": "E", "parents": ["C"] } ]

    乍一看,这是我会采用的方法,并且主要按照您的要求返回。因为F 没有优势,所以您无法从 AQL 语句的第二部分 (FOR child IN OUTBOUND parent EdgeCollection) 访问它。该声明将仅收集儿童。 F 在技术上不是孩子也不是父母,因为它是无边的。

    COLLECT 语句非常强大,并且会更深入地研究这些类型的分组。 https://www.arangodb.com/docs/stable/aql/operations-collect.html

    【讨论】:

    • 谢谢,这真的很接近我想要的,除了它不返回 F,(应该是孩子 F,父母空着)。不过,我确实设法想出了更适合我需要的东西。
    【解决方案2】:

    经过一番折腾,我最终创建了一个适合我需要的查询。

    FOR child in entity
         LET parents = (
                FOR p IN INBOUND child link
                RETURN {parentfp: p.fingerprint, parentTypeFp: p.typeFp})
                RETURN MERGE(\n" +
                {   
                  childFp: child.fingerprint,
                  childTypeFp: child.typeFp,
                  parents
                 })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 2021-02-23
      相关资源
      最近更新 更多