1

我正在尝试通过一个非常简单的查询来使用 MongoDB 聚合功能,但由于某种原因无法获得我正在寻找的最终结果。

我需要在我的收藏中获取记录状态的分组和总数。记录的状态 (JITM025) 可以是 1-Passed、2-Warnings 或 3-Errors。然后我想把总数加起来。分组基于唯一的组 ID (JITM002)。我能够以某种方式进行分组和排序,但是对于我的一生来说,我无法获得每个组 ID 的组总数 - 相反,我获得了每个分组中所有行的总数。

这是到目前为止我能够弄清楚的聚合管道(不确定它是否 100% 正确):

[
  {
    "$facet": {
      "id":       [{ "$group": { "_id": "$JITM002" }} ], 
      "passed":   [{ "$match": { "JITM025": 1 }}, { "$count": "total" }], 
      "warnings": [{ "$match": { "JITM025": 2 }}, { "$count": "total" }], 
      "errors":   [{ "$match": { "JITM025": 3 }}, { "$count": "total" }], 
      "total":    [{ "$match": { "JITM025": { "$gt": 0 }}}, { "$count": "all" }]
    }
  }, 
  {
    "$unwind": "$id"
  }, 
  {
    "$sort": { "id": 1 }
  }, 
  {
    "$project": {
      "id":       { "$ifNull": [{ "$arrayElemAt": [ "$id:id", 0 ]}, "$id._id" ]}, 
      "passed":   { "$ifNull": [{ "$arrayElemAt": [ "$passed.total", 0 ]}, 0  ]}, 
      "warnings": { "$ifNull": [{ "$arrayElemAt": [ "$warnings.total", 0 ]}, 0 ]}, 
      "errors":   { "$ifNull": [{ "$arrayElemAt": [ "$errors.total", 0 ]}, 0 ]}, 
      "total":    { "$ifNull": [{ "$arrayElemAt": [ "$total.all", 0 ]}, 0 ]}
    }
  }
]

以下是我目前在 MongoDB Compass 的聚合控制台中获得的结果:

在此处输入图像描述

我得到了 2 个组的正确结果,按组 ID(750 和 751)排序。问题是没有显示每个组的总数 - 它们是所有行的总数加在一起。我需要总数与他们自己的组 ID 有关。

4

0 回答 0