如何在mongodb聚合中将数组划分为特定大小的子数组的数组

问题描述 投票:0回答:1

如果数组长度超过40,我想将customer数组分为子数组,例如,enter image description here如果customer数组中有80个对象,则应分为两个大小为40的子数组

mongodb mongoose aggregation-framework
1个回答
0
投票

您可以执行以下操作:

  1. 使用
    $range
    查找原始数组中每个子数组的起始索引;你会得到一个存储起始索引的数组
  2. 使用
    $slice
    获取子数组的每个切片
  3. 使用
    $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。

© www.soinside.com 2019 - 2024. All rights reserved.