ArangoDB 如何使用迭代遍历合并aql查询

i5desfxk  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(178)

我想使用AQL查询ArangoDB中的一个集合,并在查询中的每个节点上使用遍历展开该节点。
我尝试在集合查询中使用LET语句将遍历作为子查询来调用,结果集是空的,即使查询完成了。
第一个
我已经验证了存在边,并且当不作为子查询执行时,遍历正确返回。
看起来好像初始查询在从子查询返回结果之前就完成了,结果如下所示.
我错过了什么?或者有更好的方法吗?

rbpvctlc

rbpvctlc1#

我可以想到两种方法来实现这一点。第一种更容易理解,但第二种更简洁。对于下面的例子,我有一个顶点集合test2和一个边集合testEdge,它链接test2中的父项和子项
使用收集:

let seed = (FOR testItem IN test2
            FILTER testItem._id in ['test2/Q1', 'test2/Q3'] 
            RETURN testItem._id)

let traversal = (FOR seedItem in seed
    FOR v, e IN 1..1 ANY seedItem
    testEdge
RETURN {seed: seedItem, e_to: e._to})

for t in traversal
COLLECT seeds = t.seed INTO groups = t.e_to
return {myseed: seeds, mygroups: groups}

上面我们首先得到我们想要遍历的项(seed),然后我们执行遍历并得到一个具有seed.id和相关边的对象,最后我们使用collect into对结果进行分组
使用阵列扩展

FOR testItem IN test2
    FILTER testItem._id in ['test2/Q1', 'test2/Q3']
    LET testEdges = (
    FOR v, e IN 1..1 ANY testItem testEdge
        RETURN e
    )
RETURN {myseed: testItem._id, mygroups: testEdges[*]._to}

这一次,我们使用let语句将种子搜索和遍历结合起来。
在这两种情况下,我最终得到的结果如下所示:

[
  {
    "myseed": "test2/Q1",
    "mygroups": [
      "test2/Q1-P5-2",
      "test2/Q1-P6-3",
      "test2/Q1-P4-1"
    ]
  },
  {
    "myseed": "test2/Q3",
    "mygroups": [
      "test2/Q3",
      "test2/Q3"
    ]
  }
]

相关问题