Go语言使用mongodb

17 篇文章 1 订阅
2 篇文章 0 订阅

拉取软件包

go get go.mongodb.org/mongo-driver/mongo

连接mongodb数据库

package main

import (
	"context"
	"fmt"

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

func connect(uri, username, passward string) (*mongo.Client, error) {
	// 连接参数
	clientOptions := options.Client().ApplyURI(uri).SetAuth(options.Credential{
		Username: username,
		Password: passward,
	})

	// 连接
	client, err := mongo.Connect(context.Background(), clientOptions)
	if err != nil {
    	return nil, err
	}

	// 检查连接
	err = client.Ping(context.Background(), readpref.Primary())
    if err != nil {
        return nil, err
    }

	// 连接数据库并返回
	return client, nil
}

func main() {
	client, err := connect("mongodb://localhost:27017", "root", "1234")
	if err != nil {
		panic(err)
	}
	db := client.Database("db_test")	
	fmt.Printf("数据库%s连接成功\r\n", db.Name())
}

在这里插入图片描述

断开连接

err = client.Disconnect(context.TODO())
if err != nil {
	panic(err)
}
fmt.Println("断开连接成功")

BSON文档

在MongoDB中,数据以BSON(Binary JSON)的格式存储。BSON是一种二进制表示的JSON文档形式

D是有序的BSON文档
E是D中的一个元素
M是无序的BSON文档
A是有序的BSON数组
在这里插入图片描述

插入数据

type User struct {
	Name string `bson:"name"`
	Age int16 `basn:"age"`
}

func insert(users *mongo.Collection) error {
	// 插入一条BAON文档
	res1, err := users.InsertOne(context.Background(), User{Name: "tom", Age: 18})
	if err != nil {
		return err
	}
	fmt.Println("id: ", res1.InsertedID)
	
	// 插入多条BAON文档
	res2, err := users.InsertMany(context.Background(), []interface{}{User{Name: "jack", Age: 17}, User{Name: "lisa", Age: 20}})
	if err != nil {
		return err
	}
	fmt.Println("ids: ", res2.InsertedIDs)

	return nil
}

查询数据

func search(users *mongo.Collection) error {
	// 查询条件:name == jack
	filter := bson.M{"name": "jack"}

	// 查询一个
	res := users.FindOne(context.Background(), filter)
	user := User{}
	err := res.Decode(&user)
	if err != nil {
		return err
	}
	fmt.Println("user: ", user)
	
	// 查询多个
	cursor, err := users.Find(context.Background(), filter)
	if err != nil {
		return err
	}
	ress := make([]User, 0)
	err = cursor.All(context.Background(), &ress)
	if err != nil {
		return err
	}
	fmt.Println("users: ", ress)
	
	return nil
}

修改数据

func update(users *mongo.Collection) error {
	// 查询条件:name == jack
	filter := bson.M{"name": "jack"}

	// 修改一个
	res, err := users.UpdateOne(context.Background(), filter, bson.M{"$set": bson.M{"age": 10}})
	if err != nil {
		return err
	}
	fmt.Printf("matched count %d, modified count %d\r\n", res.MatchedCount, res.ModifiedCount)
	
	// 修改多个
	res, err = users.UpdateMany(context.Background(), filter, bson.M{"$set": bson.M{"age": 10}})
	if err != nil {
		return err
	}
	fmt.Printf("matched count %d, modified count %d\r\n", res.MatchedCount, res.ModifiedCount)

	return nil
}

删除数据

func delete(users *mongo.Collection) error {
	// 查询条件:name == jack
	filter := bson.M{"name": "jack"}
	// 删除一个
	res, err := users.DeleteOne(context.Background(), filter)
	if err != nil {
		return err
	}
	fmt.Printf("deleted count %d\r\n", res.DeletedCount)

	// 删除多个
	res, err = users.DeleteMany(context.Background(), filter)
	if err != nil {
		return err
	}
	fmt.Printf("deleted count %d\r\n", res.DeletedCount)

	return nil
}
  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉墨居士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值