Skip to content

聚合管道阶段 - $group

通过聚合管道阶段构建器 aggregation.NewStageBuilder 的方法 Group 构建 $group 阶段。

假设我们想根据年龄来分组,并计算每个年龄组有多少用户,同时获取每个年龄组中用户的名称列表

go
type User struct {
	mongox.Model `bson:"inline"`
	Name         string `bson:"name"`
	Age          int    `bson:"age"`
}

// mongo.Pipeline{bson.D{bson.E{Key:"$group", Value:bson.D{bson.E{Key:"_id", Value:"$age"}, bson.E{Key:"count", Value:bson.D{bson.E{Key:"$sum", Value:1}}}, bson.E{Key:"names", Value:bson.D{bson.E{Key:"$push", Value:"$name"}}}}}}}
//[
//  {
//    "$group": {
//      "_id": "$age",
//      "count": { "$sum": 1 },
//      "names": { "$push": "$name" }
//    }
//  }
//]
aggregation.NewStageBuilder().Group("$age",
    aggregation.NewBuilder().Sum("count", 1).Push("names", "$name").Build()...,
).Build()

Group 方法有两个参数,分别是 id any, accumulators ...bson.Eid 用于指定分组的字段,accumulators 用于指定聚合操作符,如 $sum$push 等。