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

469 阅读2分钟

「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战」。

3. insert 插入

  • 定义一个类型
type PersonInfo struct {
	Name  string
	Age   float64
	Major string
}

3.1 插入单条数据

  • 定义数据
fan := PersonInfo{"FanOne", 17.99, "Big Data"}
  • 插入
insertResult, err := Collection.InsertOne(context.TODO(), fan)
  • 查看插入结果的id
fmt.Println(insertResult.InsertedID)

在这里插入图片描述

3.2 插入多条数据

在MongoDB中我们看到这个InsertMany的函数的实际上是要传入一个[]interface{}类型的

  • 声明数据类型
var fans []interface{}
  • bson.M{}

在go.mongodb中有两种族来使用bson数据,分别是DRAW。 D族是使用原生Go形式来构造一个BSON对象。这个对于使用命令来操作mongoDB是十分有用的。

D()由下面4种类型:

  • D:一个BSON文档,这个是有序的。
  • M:一个无序的map。它除了无序之外和D是一样的(可以理解为map和bson是可以转换)。
  • A:一个BSON形式的数组。
  • E:一个D里面的单独元素。(就是文档里的一个元素)

RAW族是被用来判断是否为bytes的一个slice。

你也可以用look up()方法从RAW取得一个元素。这可以在你将BSON转化为另一个形式的数 据时是十分有用的(原文大概意思是可以节省你转化数据时的开销)。

for i := 0; i <= 10; i++ {
	fan := PersonInfo{"FanOne", 17.99, "Big Data"}
	fan.Name = fan.Name + strconv.Itoa(i)
	fans = append(fans, bson.M{"name": fan.Name, "age": fan.Age, "major": fan.Major})
}
insertResult, err := Collection.InsertMany(context.TODO(), fans) 
// 插入多条数据
if err != nil {
	fmt.Println(err)
}
fmt.Println(insertResult.InsertedIDs)

在这里插入图片描述

一些聚类函数的总结

表达式描述实例
$sum计算总和bson.D{{"group", bson.D{{"_id", "major"},{"sum", bson.D{{"$sum", 1},}},}},}
$avg计算平均值bson.D{{"group",bson.D{{"_id","major"},{"ageAvg",bson.D{{"avg"," avg","age"},}},}},}
$min获取集合中所有文档对应值得最小值。bson.D{{"group",bson.D{{"_id","major"},{"minAvg",bson.D{{"min","min","age"}}}}}}
$max获取集合中所有文档对应值得最大值。bson.D{{"group",bson.D{{"_id","major"},{"maxAvg",bson.D{{"max","max","age"}}}}}}
$push在结果文档中插入值到一个数组中。bson.D{{"group", bson.D{{"_id", "name"}, {"num", bson.D{{"$push", "test"}}}}}}
$addToSet在结果文档中插入值到一个数组中,但不创建副本。bson.D{{"group", bson.D{{"_id", "name"}, {"num", bson.D{{"$addToSet", "test"}}}}}}
$first根据资源文档的排序获取第一个文档数据。bson.D{{"group", bson.D{{"_id", "major"}, {"first", bson.D{{"first","first", "name"}}}}}}
$last根据资源文档的排序获取最后一个文档数据bson.D{{"group", bson.D{{"_id", "major"}, {"first", bson.D{{"last","last", "name"}}}}}}