You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ArangoDB的AQL查询能否单次循环将文档两列合并为单个数组列?

ArangoDB AQL单次遍历合并字段实现方案

AQL原生支持单次遍历完成多字段合并、全局去重逻辑,无需对同一集合执行多次遍历。
示例中两次遍历同集合取Id再调用union_distinct的写法存在冗余:两次遍历读取的是同一集合的同一字段,最终效果等价于提取全表所有不重复Id,完全可以通过单次遍历实现。

合并单文档两列为全局去重单数组

如果需求是将每个文档内的两个字段(例如Id、关联字段ParentId)全局合并为无重复值的一维数组,单次遍历同时返回两个字段,扁平化处理后去重即可:

// 3.7及以上版本支持UNIQUE_DISTINCT,写法更简洁
RETURN UNIQUE_DISTINCT(
  FLATTEN(
    FOR doc IN table
      // 单次循环同时返回需要合并的两个字段
      RETURN [doc.Id, doc.ParentId]
  )
)

3.7以下老版本可通过APPLY配合UNION_DISTINCT实现相同效果:

RETURN APPLY(
  "UNION_DISTINCT",
  FOR doc IN table
    RETURN [doc.Id, doc.ParentId]
)

示例需求的最简写法

示例代码的核心逻辑是提取table集合所有不重复的Id,无需两次遍历,最简单次遍历写法如下:

RETURN UNIQUE_DISTINCT(
  FOR doc IN table
    RETURN doc.Id
)

该实现仅遍历一次集合,性能远高于两次遍历后合并去重的方案。

内容的提问来源于stack exchange,提问作者Рэм Кудусов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:06:14