您可以传递字段路径操作数或文档操作数来展开数组字段。
您可以将数组字段路径传递给$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
按降序排列。该操作返回以下结果: