是否可以在 ArangoDB 查询中将一个文档的两列合并为一列?

问题描述 投票:0回答:1

我有一个 AQL 查询:

return union_distinct(
    for a in table
        return a.Id,
    for b in table
        return b.Id)

是否可以在一次循环中获取两列作为一个数组?

sql request arangodb
1个回答
0
投票

是的。可以通过以下方式:

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

© www.soinside.com 2019 - 2024. All rights reserved.