登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-03-02 11:36:26 262浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《如何使用 $group 聚合计算数据内的记录总数》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

我正在尝试使用 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
   }

为此,我想要在 data:: 中预设总记录

"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聚合可以吗?


解决方案


您可以使用 $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)

以上就是《如何使用 $group 聚合计算数据内的记录总数》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>