繁体   English   中英

AQL返回平面合并列表

[英]AQL return flat merged list

我想在AQL中返回一个唯一的产品选项列表,我知道COLLECT可以返回唯一列表,但是,我现在如何将其展平为一个数组。

所以我想返回以下过滤列表:(让我们称之为列表[A])

[
  [
    "Size"
  ],
  [
    "Size",
    "Color"
  ],
  [
    "value"
  ]
]

as :(让我们称之为[B])

["Size","Color","Value"]

用于获取列表的查询[A]

FOR product IN products
    COLLECT options = product.options[*].option
    FILTER LENGTH( options ) > 0
RETURN options

我试过FLATTEN,UNIQUE而且没有运气。 也许我没有准确地使用函数。 我最初的想法是重新打包列表[A]中的项目以创建列表[B]类似于将[A]推入[B],如果不是[B]

FLATTEN实际应该工作。 默认情况下,它将仅折叠第一级上的项目,但可以为要折叠的级别数量提供额外的参数。

例如,您可以在更深层次嵌套的结构上使用级别3,如下所示:

/* values to flatten */
LET values = [[[["Size"]],[["Size","Color"]],["value"]]]
RETURN FLATTEN(values, 3)

这将返回平面数组中的所有项目和子项目,即

[ 
  "Size", 
  "Size", 
  "Color", 
  "value" 
] 

在具体的例子查询您发布,使用FLATTEN像如下将无法正常工作,因为FLATTEN会为每个单独调用的product文档:

FOR product IN products
  COLLECT options = product.options[*].option
  FILTER LENGTH( options ) > 0
  RETURN FLATTEN(options, 2)

因此它不会生成单个折叠数组,而是生成多个已经折叠的深度为1的数组。

要从所有product文档创建折叠数组,可以在FOR循环之外应用FLATTEN

RETURN FLATTEN(
  FOR product IN products
    COLLECT options = product.options[*].option
    FILTER LENGTH( options ) > 0
    RETURN options
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM