Mongodb 简单操作备忘录及Golang操作mongodb的笔记
package main
import (
"context"
"fmt"
"time"
"/mongo-driver/bson"
"/mongo-driver/mongo"
"/mongo-driver/mongo/options"
)
func main() {
/*
文档 Document
数组 Array
*/
ctx, cancel := context.WithTimeout(context.Background(), time.Second*60)
defer cancel()
// 设置客户端连接配置
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
// 连接到MongoDB
client, err := mongo.Connect(ctx, clientOptions)
if err != nil {
fmt.Println(err)
}
defer func() {
if err := client.Disconnect(ctx); err != nil {
panic(err)
}
}()
// 检查连接
err = client.Ping(context.TODO(), nil)
if err != nil {
fmt.Println(err)
}
fmt.Println("Connected to MongoDB!")
coll := client.Database("gin").Collection("gin")
// 增
// 新增一条 注意在{} 中的语法 一个字段要写在一个{}中,前面是字段后面是值
rst, err := coll.InsertOne(ctx, bson.D{{"name", "ss"}, {"age", 20}})
if err != nil {
fmt.Println(err)
}
fmt.Println(rst.InsertedID)
/* 相当于shell客户端中的
({name:"ss",age:20})
*/
// 新增多条
type Student struct {
Name string
Age uint8
}
// 结构体的方式
// 类型必须是 []interface{}
stus := []interface{}{Student{Name: "stu1", Age: 10}, Student{Name: "stu2", Age: 11}, Student{Name: "stu3", Age: 12}}
rst2, err := coll.InsertMany(ctx, stus)
if err != nil {
fmt.Println(err)
panic("插入多条数据失败")
}
fmt.Println(rst2.InsertedIDs...)
/*
相当于 ([{name:"stu1", age: 10}, {name:"stu2", age:20}])
*/
// bson的方式
stus1 := []interface{}{bson.D{{"name", "bson001"}, {"age", 30}}, bson.D{{"name", "bson0002"}, {"age", 32}}}
rst3, err := coll.InsertMany(ctx, stus1)
if err != nil {
fmt.Println(err)
panic("bson的方式插入多条数据失败")
}
fmt.Println(rst3.InsertedIDs)
// 查
// 完全匹配 查一条
var s1 Student
if err := coll.FindOne(ctx, bson.D{{"name", "bson001"}}).Decode(&s1); err != nil {
fmt.Println(err)
}
fmt.Printf("name--%v,age--%v\n", s1.Name, s1.Age)
// 查多条 >= 需要嵌套 ({age:{$gt:10}})
cur1, err := coll.Find(ctx, bson.D{{"age", bson.D{{"$gt", 10}}}})
if err != nil {
fmt.Println(err)
}
// 结果是一个游标 需要遍历然后单条解析
var stus0 = make([]Student, 0)
for cur1.Next(ctx) {
s := Student{}
cur1.Decode(&s)
// (, )
stus0 = append(stus0, s)
}
fmt.Println(stus0)
// 改
// 改一条
uprst, err := coll.UpdateOne(ctx, bson.D{{"name", "bson001"}}, bson.D{{"$inc", bson.D{{"age", 2}}}})
if err != nil {
fmt.Println(err)
}
fmt.Println(uprst.MatchedCount, uprst.UpsertedCount, uprst.UpsertedID)
// 改多条
uprst2, err := coll.UpdateMany(ctx, bson.D{{"name", "bson0002"}}, bson.D{{"$set", bson.D{{"age", 100}}}})
if err != nil {
fmt.Println(err)
}
fmt.Println(uprst2.MatchedCount, uprst2.ModifiedCount)
/*
修改时 修改的对象必须是 $开头的 $set 直接设置 $inc 在原有的基础上增加 $
*/
// 删
// 删一条
rst11, err := coll.DeleteOne(ctx, bson.D{{"name", "stu1"}})
if err != nil {
fmt.Println(err)
}
/*
相当于 ({name:"stu1"})
*/
fmt.Println(rst11.DeletedCount)
// 删多条
rst12, err := coll.DeleteMany(ctx, bson.D{{"name", "stu1"}})
if err != nil {
fmt.Println(err)
}
fmt.Println(rst12.DeletedCount)
/*
相当于 ({name:"stu1"})
*/
// 删除全部
rst13, err := coll.DeleteMany(ctx, bson.D{})
if err != nil {
fmt.Println(err)
}
fmt.Println(rst13.DeletedCount)
}