Golang实现Mongo数据库增删改查操作

 更新时间:2024年01月09日 11:38:58   作者:Amctwd  
本文主要介绍了Golang实现Mongo数据库增删改查操作,我们使用了 MongoDB的官方Go驱动程序,实现了插入、查询、更新和删除操作,感兴趣的可以了解一下

本文将通过一个简单的 Go 语言示例,介绍如何使用 MongoDB 进行基本的数据操作,包括插入、查询、更新和删除操作。我们将使用 MongoDB 的官方 Go 驱动程序来与数据库进行交互。

一、引言

MongoDB 是一款流行的 NoSQL 数据库,它使用文档存储结构,可以存储非常复杂的数据类型。Go 语言以其简洁和高效的特性,成为越来越多开发者选择的编程语言。在本文中,我们将结合 Go 语言和 MongoDB,展示如何实现基本的数据操作。

二、环境准备

安装 MongoDB:请参考 MongoDB 的官方文档进行安装。

安装 Go 语言环境:请参考 Go 语言的官方文档进行安装。

安装 MongoDB Go 驱动程序:在终端中运行 go get go.mongodb.org/mongo-driver/mongo

三、代码实现

以下是一个简单的 Go 语言示例,展示了如何使用 MongoDB 进行数据操作。

1. 连接到 MongoDB

func MongoClient() *mongo.Client {
	clientOptions := options.Client().ApplyURI("mongodb://10.90.45.1:27017/?connect=direct")
	client, err := mongo.Connect(context.TODO(), clientOptions)
	if err != nil {
		log.Fatal(err)
	}
	return client
}

2. 插入数据

func InsertOne(client *mongo.Client, databaseName string, collectionName string, doc bson.M) error {
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()
	collection := client.Database(databaseName).Collection(collectionName)
	_, err := collection.InsertOne(ctx, doc)
	return err
}
func InsertMany(client *mongo.Client, databaseName string, collectionName string, doc []interface{}) error {
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()
	collection := client.Database(databaseName).Collection(collectionName)
	_, err := collection.InsertMany(ctx, doc)
	return err
}

3. 查询数据

func Find(client *mongo.Client, databaseName string, collectionName string, filter bson.M) ([]bson.M, error) {
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()
	collection := client.Database(databaseName).Collection(collectionName)
	cur, err := collection.Find(ctx, filter)
	if err != nil {
		return nil, err
	}
	defer cur.Close(ctx)
	var results []bson.M
	for cur.Next(ctx) {
		var result bson.M
		err := cur.Decode(&result)
		if err != nil {
			return nil, err
		}
		results = append(results, result)
	}
	if err := cur.Err(); err != nil {
		return nil, err
	}
	return results, nil
}

4. 更新数据

func UpdateOne(client *mongo.Client, databaseName string, collectionName string, filter bson.M, update bson.M) error {
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()
	collection := client.Database(databaseName).Collection(collectionName)
	_, err := collection.UpdateOne(ctx, filter, bson.M{"$set": update})
	return err
}
func UpdateMany(client *mongo.Client, databaseName string, collectionName string, filter bson.M, update bson.M) error {
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()
	collection := client.Database(databaseName).Collection(collectionName)
	_, err := collection.UpdateMany(ctx, filter, bson.M{"$set": update})
	return err
}

5. 删除数据

func DeleteOne(client *mongo.Client, databaseName string, collectionName string, filter bson.M) error {
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()
	collection := client.Database(databaseName).Collection(collectionName)
	_, err := collection.DeleteOne(ctx, filter)
	return err
}
func DeleteMany(client *mongo.Client, databaseName string, collectionName string, filter bson.M) error {
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()
	collection := client.Database(databaseName).Collection(collectionName)
	_, err := collection.DeleteMany(ctx, filter)
	return err
}

6.Main执行

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"
)

func main() {
	client := MongoClient()
	defer client.Disconnect(context.TODO())

	dbName := "mydatabase"
	dcName := "mycollection"

	// 插入操作
	record := bson.M{"name": "John Doe", "age": 30}
	if err := InsertOne(client, dbName, dcName, record); err != nil {
		log.Fatal(err)
	}
	records := []interface{}{
		bson.M{"name": "Taylor Smith", "sex": "male", "age": 27},
		bson.M{"name": "Lisa Rune", "sex": "female", "age": 28},
		bson.M{"name": "Lily", "sex": "female", "age": 28},
		bson.M{"name": "Alex", "sex": "female", "age": 26},
		bson.M{"name": "Alisa", "sex": "female", "age": 19},
		bson.M{"name": "Tom", "sex": "male", "age": 28},
		bson.M{"name": "Felix", "sex": "male", "age": 32},
		bson.M{"name": "Richard", "sex": "male", "age": 30},
	}
	if err := InsertMany(client, dbName, dcName, records); err != nil {
		log.Fatal(err)
	}
	// 查询操作
	results, err := Find(client, dbName, dcName, bson.M{"age": 30})
	if err != nil {
		log.Fatal(err)
	}
	for _, result := range results {
		fmt.Println(result)
	}
	// 更新操作
	if err := UpsertOne(client, dbName, dcName, bson.M{"name": "Lisa Rune"}, bson.M{"age": 31}); err != nil {
		log.Fatal(err)
	}
	if err := UpdateMany(client, dbName, dcName, bson.M{"sex": "male"}, bson.M{"age": 31}); err != nil {
		log.Fatal(err)
	}
	// 删除操作
	if err := DeleteOne(client, dbName, dcName, bson.M{"name": "John Doe"}); err != nil {
		log.Fatal(err)
	}
	if err := DeleteMany(client, dbName, dcName, bson.M{"sex": "female"}); err != nil {
		log.Fatal(err)
	}
}

7.结果

在这里插入图片描述

四、总结

本文通过一个简单的 Go 语言示例,介绍了如何使用 MongoDB 进行基本的数据操作。我们使用了 MongoDB 的官方 Go 驱动程序,实现了插入、查询、更新和删除操作。希望这个示例能够帮助您更好地了解如何在 Go 语言中使用 MongoDB 进行数据操作。

到此这篇关于Golang实现Mongo数据库增删改查操作的文章就介绍到这了,更多相关Golang Mongo增删改查内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang在Window环境使用Imagick7的过程

    Golang在Window环境使用Imagick7的过程

    这篇文章主要介绍了Golang在Window环境使用Imagick7的过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • Go语言学习教程之声明语法(译)

    Go语言学习教程之声明语法(译)

    Golang 就是类C的语法,下面这篇文章主要给大家介绍了关于Go语言学习教程之声明语法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-11-11
  • go panic时如何让函数返回数据?

    go panic时如何让函数返回数据?

    今天小编就为大家分享一篇关于go panic时如何让函数返回数据?,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 解决vscode中golang插件依赖安装失败问题

    解决vscode中golang插件依赖安装失败问题

    这篇文章主要介绍了解决vscode中golang插件依赖安装失败问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • golang语言如何将interface转为int, string,slice,struct等类型

    golang语言如何将interface转为int, string,slice,struct等类型

    这篇文章主要介绍了golang语言如何将interface转为int, string,slice,struct等类型,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Golang巧用defer进行错误处理的方法

    Golang巧用defer进行错误处理的方法

    错误处理是程序的重要组成部分,有效且优雅的处理错误是大多数程序员的追求,下面这篇文章主要给大家介绍了关于Golang中巧用defer进行错误处理的方法,文中通过示例介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • Go 语言数据结构之双链表学习教程

    Go 语言数据结构之双链表学习教程

    这篇文章主要为大家介绍了Go 语言数据结构之双链表学习教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • go语言编程二维码生成及识别

    go语言编程二维码生成及识别

    这篇文章主要为大家介绍了go语言编程二维码的生成及识别示例演示,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • go protobuf 详解

    go protobuf 详解

    Protobuf是Protocol Buffers的简称,它是Google公司开发的一种数据描述语言,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化,这篇文章主要介绍了protobuf 详解,需要的朋友可以参考下
    2024-01-01
  • golang 解析word文档操作

    golang 解析word文档操作

    这篇文章主要介绍了golang 解析word文档操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12

最新评论