mongodb - 如何使用 $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
}
为此,我希望在数据中预设总记录::
"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 聚合来查找数据中的总记录,链接
要计算分组数据的总数,可以在分组数据后使用 $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)
推荐阅读
- sqlite - Sqlite 删除早于的行
- c++ - Rcpp 中的 std::mt19937
- android - 替换 FragmentActivity 中的片段使我的应用程序冻结超过 5 秒
- .net - Azure 函数发布失败错误消息
- python - 无法建立新连接:[Errno 11002] getaddrinfo failed
- lambda-calculus - Lambda 正常排序
- r - 无法使用 ggplot 更改图例标题和标签
- excel - Excel ISERROR 发票
- android - 选择项目时更改回收站视图的前景色
- angular - 在 Angular 组件的 DOM 发生变化后运行函数,类似于 ngAfterViewInit