MongoDB 操作符 $unwind 展开数组(agregation)

如题所述

第1个回答  2022-07-05

$unwind :将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。

您可以传递字段路径操作数或文档操作数来展开数组字段。

字段路径

您可以将数组字段路径传递给 $unwind 。使用此语法时,如果字段值为 null 、缺失或空数组,则 $unwind 不会输出文档。

指定字段路径时,在字段名称前加上美元符号 $ 并用引号引起来。

带选项的文档

您可以将文档传递给 $unwind 以指定各种行为选项。

插入数据

使用 $unwind 展开

该操作返回以下结果:

使用 includeArrayIndex 和 preserveNullAndEmptyArrays

示例数据

以下 $unwind 操作是等效的,并为 sizes 字段中的每个元素返回一个文档。如果 sizes 字段未解析为数组但不丢失、为空或空数组, $unwind 则将非数组操作数视为单元素数组。

该操作返回以下文档:

includeArrayIndex

以下 $unwind 操作使用 includeArrayIndex 选项在输出中包含数组索引。

该操作展开 sizes 数组并在新 arrayIndex 字段中包含数组索引的数组索引。如果该 sizes 字段未解析为数组但不缺失、为 null 或空数组,则该 arrayIndex 字段为 null 。
操作返回结果:

preserveNullAndEmptyArrays

以下 $unwind 操作使用 preserveNullAndEmptyArrays 选项来包含 sizes 字段为空、缺失或空数组的文档。

输出包括 sizes 字段为空、缺失或空数组的文档:

示例数据:

以下管道展开 sizes 数组并按展开大小值对结果文档进行分组:

第一阶段:
该 $unwind 阶段为 sizes 数组中的每个元素输出一个新文档。该阶段使用 preserveNullAndEmptyArrays 选项在输出中包含 sizes 字段缺失、为空或空数组的文档。此阶段将以下文档传递到下一阶段:

第二阶段:
该 $group 阶段将文档分组 sizes 并计算每个尺寸的平均价格。此阶段将以下文档传递到下一阶段:

第三阶段:
该 $sort 阶段按 averagePrice 降序对文档进行排序。该操作返回以下结果:

在 mongosh 中,创建一个 sales 使用以下文档命名的示例集合 :

以下操作按标签对出售的商品进行分组,并计算每个标签的总销售额。

第一阶段:
第一阶段 $unwind 为 items 数组中的每个元素输出一个新文档:

第二阶段:
第二阶段 $unwind 为 items.tags 数组中的每个元素输出一个新文档:

第三阶段:
该阶段 $group 按标签对文档进行分组,并计算带有每个标签的商品的总销售额:

https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网