微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MongoDb:如何将分组依据的总计数作为固定计数而不是数组?

如何解决MongoDb:如何将分组依据的总计数作为固定计数而不是数组?

这对我来说很难说出来,因此我将尝试通过一个代码示例进行解释:

Working MongoDb Playground

db.collection.aggregate([
  {
    "$facet": {
      "countByStatus": [
        {
          "$group": {
            "_id": "$status.name","count": {
              "$sum": 1
            }
          }
        }
      ],"totalCount": [
        {
          "$group": {
            "_id": null,"count": {
              "$sum": 1
            }
          }
        }
      ]
    }
  }
])

输出

[
  {
    "countByStatus": [
      {
        "_id": "Approved","count": 2
      },{
        "_id": "Rejected","count": 1
      }
    ],"totalCount": [
      {
        "_id": null,"count": 3
      }
    ]
  }
]

所需的输出

[
  {
    "countByStatus": [
      {
        "_id": "Approved","totalCount": 3 //totalCount is a flat count instead of array here
  }
]

我可以执行查询获取结果,然后选择array[0].count的第一个元素,但是我想知道这是否可以本地完成吗?

解决方法

可以使用$let在一个阶段中完成:

{
    $project: {
        countByStatus: 1,totalCount: {
            $let: {
                vars: { first: { $arrayElemAt: [ "$totalCount",0 ] } },in: "$$first.count"
            }
        }
    }
}

Mongo Playground

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。