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,提问作者Рэм Кудусов
相关产品推荐
相关产品推荐

