【Go开源宝藏】Go语言操作 MongoDB (四)

「这是我参与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"}}}}}}
复制代码

在这里插入图片描述

扫描二维码关注公众号,回复: 13674967 查看本文章

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)
复制代码

在这里插入图片描述 在这里插入图片描述

猜你喜欢

转载自juejin.im/post/7061089186555625485