我正在尝试使用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聚合可以实现吗?
答案 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)