dtl4521 2018-11-21 15:03
浏览 822
已采纳

如何使用$ group聚合计算数据内部记录的总数

I am trying to perform a query using golang mgo package to effectively get similar values from a $group aggregation and count the total record value.But I am not able to get total record count for grouped data. My structure is like this:

{

    "data": [
        {
            "_id": 366,

            "logs": [
                {
                    "id": 113,
                    "booking_id": 366,
                    "provider_id": 13,
                    "cid": 11,
                    "type": "basic",
                    "time": 1542793756,
                },
                {
                    "id": 116,
                    "booking_id": 366,
                    "provider_id": 13,
                    "cid": 0,
                    "type": "type2",
                }


            ]
        },
        {
            "_id": 362,

            "logs": [
                {
                    "id": 104,
                    "booking_id": 362,
                    "provider_id": 7,
                    "cid": 10,
                    "type": "basic",
                    "time": 1542776677,
                }
            ]
        },

        {
            "_id": 370,

            "logs": [
                {
                    "id": 111,
                    "booking_id": 370,
                    "provider_id": 9,
                    "cid": 11,
                    "type": "basic",
                    "time": 1542792661,
                },
                {
                    "id": 112,
                    "booking_id": 370,
                    "provider_id": 11,
                    "cid": 11,
                    "type": "basic",
                    "time": 1542793185,
                }
            ]
       }

    ],
     "total_record": 2
   }

For this I want total record preset inside data::

"total_record":3 

Query I am using ::

query := []bson.M{
        {"$group": bson.M{
        "_id":  "$booking_id",
        "logs": bson.M{ "$push": "$$ROOT" }
        "count": bson.M{"$sum":1},
        }},
    }

    pipe := getCollection.Pipe(query)
    err = pipe.AllowDiskUse().One(&result)

I want total count of this result. Log section having data with duplicate bookings with the different "provider_id" values but I have grouped all similar booking_id data in single document and show it's count. Is is possible with $group aggregation?

  • 写回答

1条回答

  • dongziya9863 2018-11-22 04:37
    关注

    You can use $count aggregation to find total record inside data, link

    To calculate total count of grouped data, you can use $count aggregation after grouping data. Your Query should be like this if you want total count data::

    query := []bson.M{
            {"$group": bson.M{
            "_id":  "$booking_id",
            }},
            {"$count" : "count"},
        }
    
        pipe := getCollection.Pipe(query)
        err = pipe.AllowDiskUse().One(&result)
    

    To calculate records inside each "logs" you can use query as follows::

    query := []bson.M{
            {"$group": bson.M{
            "_id":  "$booking_id",
            "logs": bson.M{ "$push": "$$ROOT" },
            "count": bson.M{"$sum":1},
            }},
        }
    
        pipe := getCollection.Pipe(query)
        err = pipe.AllowDiskUse().One(&result)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?