MongoDB 按字段和计数分组

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

我有以下采集数据

{
  "_id": 1,
  "date": "2023-11-08",
  "field": "A"
},
{
  "_id": 2,
  "date": "2023-11-08",
  "field": "B"
},
{
  "_id": 3,
  "date": "2023-11-08",
  "field": "C"
},
{
  "_id": 4,
  "date": "2023-11-09",
  "field": "B"
},
{
  "_id": 5,
  "date": "2023-11-09",
  "field": "C"
}

我想要按日期分组并计数总计,并且计数字段值在数组中或不在数组中

数组是这样的

['A'、'D'、'E'、...]

我想要的输出

{
  _id: '2023-11-08',
  in_array: 1,
  not_in_array: 2,
  count: 3
},
{
  _id: '2023-11-09',
  in_array: 0,
  not_in_array: 2,
  count: 2
}

我怎样才能做到?

mongodb aggregation-framework
1个回答
0
投票

$sum
中执行条件
$group

db.collection.aggregate([
  {
    "$group": {
      "_id": "$date",
      "in_array": {
        $sum: {
          $let: {
            vars: {
              inputArray: [
                "A",
                "D",
                "E"
              ]
            },
            in: {
              "$cond": {
                "if": {
                  "$in": [
                    "$field",
                    "$$inputArray"
                  ]
                },
                "then": 1,
                "else": 0
              }
            }
          }
        }
      },
      "not_in_array": {
        $sum: {
          $let: {
            vars: {
              inputArray: [
                "A",
                "D",
                "E"
              ]
            },
            in: {
              "$cond": {
                "if": {
                  $not: {
                    "$in": [
                      "$field",
                      "$$inputArray"
                    ]
                  }
                },
                "then": 1,
                "else": 0
              }
            }
          }
        }
      },
      "count": {
        $sum: 1
      }
    }
  }
])

蒙戈游乐场

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