MongoDB 按字段和计数分组

MongoDB group by field and count

提问人:LMY 提问时间:11/9/2023 最后编辑:LMY 更新时间:11/9/2023 访问量:35

问:

我有以下收集数据

{
  "_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 聚合框架

评论


答:

1赞 ray 11/9/2023 #1

在 .$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
      }
    }
  }
])

蒙戈游乐场