golang 操作mongodb实现CRUD
首先使用docker创建mongodb
新建docker-compose文件
version: '3'
services:
mongo: #服务的名字
image: mongo #对应的docker镜像的名字,可指定版本,如mongo:1.0,不指定则为最新版
container_name: mongo-1 #docker容器的名字
restart: always #当docker重启时,容器自动启动。
environment: #容器内部默认的设置
MONGO_INITDB_ROOT_USERNAME: root #mongo默认的账号
MONGO_INITDB_ROOT_PASSWORD: root #mongo默认的密码
ports: #容器运行的端口号和对应的容器内部的端口号
- 27017:27017
volumes: # 数据持久化
- ./mongodb-data:/data/db
command: [ --auth ] # 指定需要认证,mongdb默认是无认证的
在终端输入:
$ docker-compose up -d
引入mongo-driver
$ go get go.mongodb.org/mongo-driver/mongo
golang实现mongo的crud
package main
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
type Person struct {
Name string
Age int
Email string
}
func main() {
// 建立MongoDB连接
client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://root:root@localhost:27017"))
if err != nil {
log.Fatal(err)
}
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
err = client.Connect(ctx)
if err != nil {
log.Fatal(err)
}
// 获取数据库和集合对象
db := client.Database("testdb")
collection := db.Collection("persons")
// 插入文档
person := Person{Name: "Alice", Age: 25, Email: "alice@example.com"}
insertResult, err := collection.InsertOne(ctx, person)
if err != nil {
log.Fatal(err)
}
fmt.Println("Inserted document ID:", insertResult.InsertedID)
// 查询文档
filter := bson.M{"name": "Alice"}
var result Person
err = collection.FindOne(ctx, filter).Decode(&result)
if err != nil {
log.Fatal(err)
}
fmt.Println("Found document:", result)
// 更新文档
update := bson.M{"$set": bson.M{"age": 26}}
updateResult, err := collection.UpdateOne(ctx, filter, update)
if err != nil {
log.Fatal(err)
}
fmt.Println("Matched count:", updateResult.MatchedCount)
fmt.Println("Modified count:", updateResult.ModifiedCount)
// 删除文档
deleteResult, err := collection.DeleteOne(ctx, filter)
if err != nil {
log.Fatal(err)
}
fmt.Println("Deleted count:", deleteResult.DeletedCount)
// 关闭连接
err = client.Disconnect(ctx)
if err != nil {
log.Fatal(err)
}
fmt.Println("Disconnected from MongoDB")
}
输出:
Inserted document ID: ObjectID("6455cc6dcee8a1a17cde65cf")
Found document: {Alice 25 alice@example.com}
Matched count: 1
Modified count: 1
Deleted count: 1
Disconnected from MongoDB