「这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战」。
4.3.5 聚类
类似:
select by_user, count(*) from mycol group by by_user
查看Aggregate
的源码可知
$sum
例子:
- 定义最大时间
opts := options.Aggregate().SetMaxTime(2 * time.Second)
- 定义查询语句
通过major字段进行划分,每一个sum变1
groupStage := bson.D{
{"$group", bson.D{
{"_id", "$major"},
{"sum", bson.D{
{"$sum", 1},
}},
}},
}
- 查询
result, err := Collection.Aggregate(context.TODO(), mongo.Pipeline{groupStage}, opts)
- 赋值,注意这里类型可以自己定义,也可以直接用
bson.M
var results []bson.M
if err = result.All(context.TODO(), &results); err != nil {
log.Fatal(err)
}
fmt.Printf("results : %+v\n", results)
$avg
例子
- 定义一个过滤条件
计算各个major
的平均age
字段
groupStage := bson.D{{"$group",bson.D{{"_id","$major"},{"ageAvg",bson.D{{"$avg","$age"},}},}},}
数据库
结果
$min例子
找到以major为分组,各组最小的age
groupStage := bson.D{{"$group",bson.D{{"_id","$major"},{"minAvg",bson.D{{"$min","$age"}}}}}}
5. update 更新
5.1 更新单条
第一个是filter,选出哪个更新,第二个是传进去的更新的东西,要传
$set
res, err := Collection.UpdateOne(context.TODO(), bson.M{"name": "FanOne1"}, bson.M{"$set": bson.M{"age": 111}})
- 结果
5.2 更新多条
UpdateMany
找到字段major是BigData的,然后把age变成111。
res, err := Collection.UpdateMany(context.TODO(), bson.M{"major": "Big Data"}, bson.M{"$set": bson.M{"age": 111}})
- 结果
6. delete 删除
6.1 删除单条
res, err := Collection.DeleteOne(context.TODO(), bson.M{"name": "FanOne0"})
if err != nil {
log.Fatal(err)
}
fmt.Printf("result : %+v\n", res)
6.2 删除多条
res, err := Collection.DeleteMany(context.TODO(), bson.M{"major": "CS"})
if err != nil {
log.Fatal(err)
}
fmt.Printf("result : %+v\n", res)