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

How to count total number of records inside data using $group aggregation

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
{

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

为此,我要在内部数据中预置总记录:

1
"total_record":3

查询我正在使用::

1
2
3
4
5
6
7
8
9
10
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聚合来查找数据中的总记录,链接

要计算分组数据的总数,可以在对数据分组之后使用$ count聚合。 如果您希望总数data :,则查询应该是这样的:

1
2
3
4
5
6
7
8
9
query := []bson.M{
        {"$group": bson.M{
       "_id": "$booking_id",
        }},
        {"$count" :"count"},
    }

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

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

1
2
3
4
5
6
7
8
9
10
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)