您可以执行以下操作:
$range
查找原始数组中每个子数组的起始索引;你会得到一个存储起始索引的数组$slice
获取子数组的每个切片$map
将切片重新分组为单个数组db.collection.aggregate([
{
"$addFields": {
// replace your example to 40 here
"subarraySize": 3
}
},
{
"$addFields": {
"startingIndices": {
"$range": [
0,
{
"$size": "$array"
},
"$subarraySize"
]
}
}
},
{
"$project": {
"slicedArray": {
"$map": {
"input": "$startingIndices",
"as": "i",
"in": {
$slice: [
"$array",
"$$i",
"$subarraySize"
]
}
}
}
}
}
])
这里是Mongo游乐场供您参考。数组大小已参数化,因此您可以轻松地将其替换为数组大小 40。