您可以传递字段路径操作数或文档操作数来展开数组字段。
您可以将数组字段路径传递给$unwind。使用此语法时,$unwind如果字段值为null,丢失或空数组,则不输出文档。
指定字段路径时,请在字段名称前加上美元符号$并用引号引起来。
3.2版中的新功能。
您可以将文档传递到$unwind以指定各种行为选项。
| 领域 | 类型 | 描述 |
|---|---|---|
| 路径 | 串 | 数组字段的字段路径。要指定字段路径,请在字段名称前加一个美元符号 |
| includeArrayIndex | 串 | 可选的。一个新字段的名称,用于保存元素的数组索引。名称不能以美元符号开头 |
| reserveNullAndEmptyArrays | 布尔值 | 可选的。 默认值为 |
在版本3.2中进行了更改:$unwind在非数组操作数上不再出现阶段错误。如果操作数不能解析为数组但不丢失,为null或为空数组,$unwind则将操作数视为单个元素数组。如果操作数为null,缺失或为空数组,则行为$unwind取决于preserveNullAndEmptyArrays
选项的值。
以前,如果由字段路径指定的字段中的值
不是数组,db.collection.aggregate()则会生成错误。
如果您为输入文档中不存在的字段指定路径,或者该字段为空数组,则$unwind默认情况下,会忽略输入文档,并且不会输出该输入文档的文档。
3.2版中的新增功能:要输出缺少数组字段,为null或为空数组的文档,请使用 prepareNullAndEmptyArrays 选项。
在mongo外壳程序中,创建一个inventory使用以下文档命名的样本集合
:
以下聚合使用该$unwind阶段为sizes数组中的每个元素输出文档:
该操作返回以下结果:
每个文档都与输入文档相同,只是sizes字段的值现在包含原始sizes数组中的值
。
includeArrayIndex和preserveNullAndEmptyArrays¶3.2版中的新功能。
在mongo外壳程序中,创建一个示例集合,其名称
inventory2为以下文档:
以下$unwind操作是等效的,并为该sizes字段中的每个元素返回一个文档。如果该sizes
字段不能解析为数组但不丢失,为null或为空数组,$unwind则将非数组操作数视为单个元素数组。
该操作返回以下文档:
includeArrayIndex¶以下$unwind操作使用
includeArrayIndex选项将数组索引包含在输出中。
该操作将展开sizes数组,并将数组索引的数组索引包含在新arrayIndex字段中。如果该sizes
字段不能解析为数组,但不丢失,为null或为空数组,则该arrayIndex字段为null。
preserveNullAndEmptyArrays¶以下$unwind操作使用
preserveNullAndEmptyArrays
选项来包括其sizes字段为空,丢失或空数组的文档。
输出包括sizes字段为空,缺失或空数组的那些文档:
在mongo外壳程序中,创建一个示例集合,其名称
inventory2为以下文档:
以下管道展开sizes数组并将结果文档按展开大小值分组:
该$unwind阶段将为sizes数组中的每个元素输出一个新文档。该阶段使用
prepareNullAndEmptyArrays
选项在输出中包括sizes缺少字段,为null或为空数组的那些文档。此阶段将以下文档传递到下一阶段:
该$group阶段将文件分组,sizes
然后计算每种尺寸的平均价格。此阶段将以下文档传递到下一阶段:
该$sort阶段由排序文件averagePrice按降序排列。该操作返回以下结果: