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

时间:2018-11-21 15:03:53

标签: mongodb go mgo

我正在尝试使用golang mgo软件包执行查询以有效地从$ group聚合中获取相似的值并计算总记录值,但是我无法获得分组数据的总记录数。 我的结构是这样的:

{

    "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
   }

为此,我希望预先记录内部数据的总记录:

"total_record":3 

查询我正在使用::

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)

我想要这个结果的总数。日志部分具有重复预订的数据,但预订的数据具有不同的“ provider_id”值,但我将所有相似的booking_id数据分组在单个文档中,并显示了计数。 $ group聚合可以实现吗?

1 个答案:

答案 0 :(得分:1)

您可以使用$ count聚合来查找数据link内的总记录

要计算分组数据的总数,可以在对数据分组后使用$ count聚合。如果您希望总数data ::

,则查询应该是这样的
query := []bson.M{
        {"$group": bson.M{
        "_id":  "$booking_id",
        }},
        {"$count" : "count"},
    }

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

要计算每个"logs"中的记录,您可以使用以下查询:

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)