我的博客

go 语言操作 mongoDB 官方驱动

目录
  1. 安装
  2. 导入
  3. 连接数据库
  4. 选择数据库和集合
  5. 插入、查询、更新、删除
    1. 插入
    2. 查询
    3. 更新
    4. 删除
  6. 关闭连接

mongoDB 官网给出了 go 语言使用 mongodb 的教程

安装

go get go.mongodb.org/mongo-driver

导入

1
2
3
4
5
6
7
8
9
import (
"context"
"fmt"
"log"

"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)

下面三个是关于 mongoDB 的包。

连接数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 设置选项
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")

// 连接
client, err := mongo.Connect(context.TODO(), clientOptions)

if err != nil {
log.Fatal(err)
}

// 测试连接
err = client.Ping(context.TODO(), nil)

if err != nil {
log.Fatal(err)
}

fmt.Println("Connected to MongoDB!")

选择数据库和集合

1
collection := client.Database("test").Collection("trainers")

插入、查询、更新、删除

插入

1
2
3
4
5
6
7
8
9
10
11
12
13
type MyData struct {
Text string // 首字母必须大写
Value int
}

record := MyData{"text": "hello", "value": 123}

insertResult, err := collection.InsertOne(context.TODO(), record)
if err != nil {
log.Fatal(err)
}

fmt.Println("Inserted a single document: ", insertResult.InsertedID)

查询

1
2
3
4
5
6
7
8
var result MyData
filter := bson.D{{"text", "hello"}}
err = collection.FindOne(context.TODO(), filter).Decode(&result)
if err != nil {
log.Fatal(err)
}

fmt.Printf("Found a single document: %+v\n", result)

更新

1
2
3
4
5
6
7
8
9
10
11

filter = bson.D{{"text", "hello"}}
update := bson.D{{"$set", bson.D{{"value", 1}}}}

updateResult, err := collection.UpdateOne(context.TODO(), filter, update)

if err != nil {
log.Fatal(err)
}

fmt.Printf("Matched %v documents and updated %v documents.\n", updateResult.MatchedCount, updateResult.ModifiedCount)

删除

1
2
3
4
5
deleteResult, err := collection.DeleteMany(context.TODO(), bson.D{{}})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Deleted %v documents in the trainers collection\n", deleteResult.DeletedCount)

关闭连接

1
2
3
4
5
6
err = client.Disconnect(context.TODO())

if err != nil {
log.Fatal(err)
}
fmt.Println("Connection to MongoDB closed.")

评论无需登录,可以匿名,欢迎评论!