Go语言使用mongodb

文章目录

  • 拉取软件包
  • 连接mongodb数据库
  • 断开连接
  • BSON文档
  • 插入数据
  • 查询数据
  • 修改数据
  • 删除数据

拉取软件包

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())
}

Go语言使用mongodb_第1张图片

断开连接

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数组
Go语言使用mongodb_第2张图片

插入数据

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
}

你可能感兴趣的:(Go,容器,golang,mongodb,开发语言)