golang 操作mongodb实现CRUD

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值