支持端:小程序 2.7.4, 云函数 0.8.1, Web
聚合阶段。使用指定的数组字段中的每个元素,对文档进行拆分。拆分后,文档会从一个变为一个或多个,分别对应数组的每个元素。
使用指定的数组字段中的每个元素,对文档进行拆分。拆分后,文档会从一个变为一个或多个,分别对应数组的每个元素。
unwind 有两种使用形式:
unwind(<字段名>)
unwind({
path: <字段名>,
includeArrayIndex: <string>,
preserveNullAndEmptyArrays: <boolean>
})
字段 | 类型 | 说明 |
---|---|---|
path | string | 想要拆分的数组的字段名,需要以 $ 开头。 |
includeArrayIndex | string | 可选项,传入一个新的字段名,数组索引会保存在这个新的字段上。新的字段名不能以 $ 开头。 |
preserveNullAndEmptyArrays | boolean | 如果为 true ,那么在 path 对应的字段为 null 、空数组或者这个字段不存在时,依然会输出这个文档;如果为 false ,unwind 将不会输出这些文档。默认为 false 。 |
假设我们有一个 products 集合,包含数据如下:
{ "_id": "1", "product": "tshirt", "size": ["S", "M", "L"] }
{ "_id": "2", "product": "pants", "size": [] }
{ "_id": "3", "product": "socks", "size": null }
{ "_id": "4", "product": "trousers", "size": ["S"] }
{ "_id": "5", "product": "sweater", "size": ["M", "L"] }
我们根据 size 字段对这些文档进行拆分
db.collection("products")
.aggregate()
.unwind("$size")
.end()
输出如下:
{ "_id": "1", "product": "tshirt", "size": "S" }
{ "_id": "1", "product": "tshirt", "size": "M" }
{ "_id": "1", "product": "tshirt", "size": "L" }
{ "_id": "4", "product": "trousers", "size": "S" }
{ "_id": "5", "product": "sweater", "size": "M" }
{ "_id": "5", "product": "sweater", "size": "L" }
我们根据 size 字段对文档进行拆分后,想要保留原数组索引在新的 index 字段中。
db.collection("products")
.aggregate()
.unwind({
path: "$size",
includeArrayIndex: "index"
})
.end()
输出如下:
{ "_id": "1", "product": "tshirt", "size": "S", "index": 0 }
{ "_id": "1", "product": "tshirt", "size": "M", "index": 1 }
{ "_id": "1", "product": "tshirt", "size": "L", "index": 2 }
{ "_id": "4", "product": "trousers", "size": "S", "index": 0 }
{ "_id": "5", "product": "sweater", "size": "M", "index": 0 }
{ "_id": "5", "product": "sweater", "size": "L", "index": 1 }
注意到我们的集合中有两行特殊的空值数据:
...
{ "_id": "2", "product": "pants", "size": [] }
{ "_id": "3", "product": "socks", "size": null }
...
如果想要在输出中保留 size 为空数组、null,或者 size 字段不存在的文档,可以使用 preserveNullAndEmptyArrays 参数
db.collection("products")
.aggregate()
.unwind({
path: "$size",
preserveNullAndEmptyArrays: true
})
.end()
输出如下:
{ "_id": "1", "product": "tshirt", "size": "S" }
{ "_id": "1", "product": "tshirt", "size": "M" }
{ "_id": "1", "product": "tshirt", "size": "L" }
{ "_id": "2", "product": "pants", "size": null }
{ "_id": "3", "product": "socks", "size": null }
{ "_id": "4", "product": "trousers", "size": "S" }
{ "_id": "5", "product": "sweater", "size": "M" }
{ "_id": "5", "product": "sweater", "size": "L" }
Command.geoNear(options: Object):Command支持端:小程序,云函数,Web按从近到远的顺序,找出字段值在给定点的附近的记录。参数o...
AggregateCommand.cond(value: any): Object支持端:小程序 2.7.4,云函数 0.8.1,Web聚合操作符。计算布尔表达式,返回指定的两个...
云函数注意: HTTP API 途径触发云函数不包含用户信息云开发 HTTP API 提供了以下云函数调用 API:触发云函数:invokeCloudFuncti...
#概览不兼容:v-bind 的绑定顺序会影响渲染结果。#介绍在元素上动态绑定 attribute 时,常见的场景是在一个元素中同时使用 v-bin...
#directives类型:Object详细:包含组件实例可用指令的哈希表。参考自定义指令#components类型:Object详细:包含组件实例可用组...
在插入、更新或从 DOM 中移除项时,Vue 提供了多种应用转换效果的方法。这包括以下工具:自动为 CSS 转换和动画应用 class;集成...
信息这是一个低级的内部 API 更改,不会影响大多数开发人员。#概览下面是对这些变化的高层次总结:删除枚举 attribute 的内部概...