我正在尝试通过一个非常简单的查询来使用 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 有关。