gpt4 book ai didi

arangodb - AQL 返回平面合并列表

转载 作者:行者123 更新时间:2023-12-03 06:42:04 26 4
gpt4 key购买 nike

我想在 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 将不起作用,因为将为每个 product 单独调用 FLATTEN文档:

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
)

关于arangodb - AQL 返回平面合并列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32779738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com