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聚合。 如果您希望总数
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) |
要计算每个
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) |