「这是我参与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数据,分别是D和RAW。
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{{"age"},}},}},} |
| $min | 获取集合中所有文档对应值得最小值。 | bson.D{{"group",bson.D{{"_id","major"},{"minAvg",bson.D{{"age"}}}}}} |
| $max | 获取集合中所有文档对应值得最大值。 | bson.D{{"group",bson.D{{"_id","major"},{"maxAvg",bson.D{{"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{{"name"}}}}}} |
| $last | 根据资源文档的排序获取最后一个文档数据 | bson.D{{"group", bson.D{{"_id", "major"}, {"first", bson.D{{"name"}}}}}} |