首页 > 解决方案 > 基于数组元素 mongoDB 的组

问题描述

说明:我们如何根据数组元素进行分组,我想根据两个数组的 0 元素进行分组。

{
  "st": [
    [
      "2011-01-04T12:18:41Z",
      0
    ],
    [
      "2011-01-04T15:00:00Z",
      0
    ]
  ],
  "en": [
    [
      "2011-01-04T14:59:50Z",
      1
    ],
    [
      "2011-01-04T15:05:00Z",
      4
    ]
  ]
}

预期的输出文件看起来像。例如

[
  {
    "st": "2011-01-04T12:18:41Z",
    "en": "2011-01-04T14:59:50Z",
    "st_val": 0,
    "en_val": 1,
    "total_index_count": 2
  }, 
  {
    "st": "2011-01-04T15:00:00Z",
    "en": "2011-01-04T15:05:00Z",
    "st_val": 0,
    "en_val": 4,
    "total_index_count": 2
  }
]

标签: arraysmongodbmongodb-queryaggregation-framework

解决方案


您可以通过几种不同的方式执行此操作,这是一种利用$mapand$arrayElemAt运算符的方法。

db.collection.aggregate([
  {
    "$project": {
      elements: {
        $map: {
          input: {
            $range: [
              0,
              {
                $size: "$st"
              }
            ]
          },
          in: {
            st_val: {
              "$arrayElemAt": [
                {
                  "$arrayElemAt": [
                    "$st",
                    "$$this"
                  ]
                },
                0
              ]
            },
            st: {
              "$arrayElemAt": [
                {
                  "$arrayElemAt": [
                    "$st",
                    "$$this"
                  ]
                },
                1
              ]
            },
            en_val: {
              "$arrayElemAt": [
                {
                  "$arrayElemAt": [
                    "$en",
                    "$$this"
                  ]
                },
                0
              ]
            },
            en: {
              "$arrayElemAt": [
                {
                  "$arrayElemAt": [
                    "$en",
                    "$$this"
                  ]
                },
                1
              ]
            },
            
          }
        }
      }
    }
  },
  {
    $unwind: "$elements"
  },
  {
    $replaceRoot: {
      newRoot: "$elements"
    }
  }
])

蒙戈游乐场


推荐阅读