我有一个 AQL 查询:
return union_distinct(
for a in table
return a.Id,
for b in table
return b.Id)
是否可以在一次循环中获取两列作为一个数组?
是的。可以通过以下方式:
RETURN UNIQUE(FLATTEN(
FOR doc IN collection
RETURN [doc.colA,doc.colB]
))
FOR循环生成一个二维数组:[[doc1.colA,doc1.colB],[doc2.colA,doc2.colB]等...] 这需要被展平,然后过滤掉唯一值。请参阅数组函数的文档:https://docs.arangodb.com/3.11/aql/functions/array/
此查询的结果将是一个嵌套数组:[[唯一值...]],因此您只需获取结果数组的第一个元素即可到达您想要的列表。
另一个解决方案将为您提供非嵌套数组:
FOR elem IN (FLATTEN(
FOR doc IN collection
RETURN [doc.colA,doc.colB]
)
RETURN DISTINCT elem
虽然这又是两个循环,但第二个循环是在内存数组上运行的,所以速度相当快。
注意:这里的“DISTINCT”不是函数,而是 RETURN 的特殊形式:https://docs.arangodb.com/3.11/aql/high-level-operations/return/#return-distinct