当前位置:   article > 正文

Go语言使用mongodb

Go语言使用mongodb

拉取软件包

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

连接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())
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

在这里插入图片描述

断开连接

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

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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

查询数据

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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

修改数据

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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

删除数据

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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号