go练习 day02

这篇具有很好参考价值的文章主要介绍了go练习 day02。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

go中使用mongodb实现增删改查
连接mongodb
yaml配置
mongodb:
  uri: mongodb://localhost:27017
初始化连接
package conf

import (
	"context"
	"fmt"
	"time"

	"github.com/spf13/viper"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
)

func InitMongoDB() (*mongo.Client, error){
	ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second)
	defer cancel()
	client, err := mongo.Connect(ctx, options.Client().ApplyURI(viper.GetString("mongodb.uri")))
	if err != nil {
		fmt.Printf("Mongodb 连接失败: %v", err)
		return nil, err 
	}
	fmt.Println("Mongodb 连接成功")

	return client, nil
}
在初始化方法中调用
	// ===========================
	// =初始化Mongodb连接
	mdb, err := conf.InitMongoDB()
	global.MDB = mdb // 将db对象挂在到全局
	if err != nil {
		initErr = utils.AppendError(initErr, err)
	}
在DAO中挂载到BaseDao上
package dao

import (
	"king/global"

	"go.mongodb.org/mongo-driver/mongo"
	"gorm.io/gorm"
)

type BaseDao struct {
	Orm *gorm.DB
	MDB *mongo.Client
}

func NewBaseDao() BaseDao {
	return BaseDao{
		Orm: global.DB,
		MDB: global.MDB,
	}
}
新增操作:添加一条记录
func (m *RecordDao) AddRecord(iRecordAddDTO *dto.RecordAddDTO) error{
	var iRecord model.Record
	iRecordAddDTO.ConverToModel(&iRecord)

	collection := m.MDB.Database("lowcode").Collection("lowcode")
	res, err := collection.InsertOne(context.Background(), iRecord)
	if err != nil { 
		fmt.Println(err)
		return err
	}

	// 将 res.InsertedId 转换为字符串  
	if id, ok := res.InsertedID.(primitive.ObjectID); ok {  
		insertedIdString := id.Hex()  
		iRecordAddDTO.ID = insertedIdString
		fmt.Println("Inserted ID:", insertedIdString)  
	} else {  
		fmt.Println("无法将 InsertedID 转换为 primitive.ObjectID 类型")  
	}  
	// 将字符串转换回ObjecrId  primitive.ObjectIDFromHex
	// oid, err := primitive.ObjectIDFromHex("64d492bbdc2330b9e0fdfcc1")
	// filter := bson.M{"_id": oid}
	// err = collection.FindOne(context.Background(), filter).Decode(&iRecord)
	
	return err
}
查找多条数据
//opts := options.Find().SetSort(bson.M{"enrollment": -1})
filter := bson.M{"_id": "64d492bbdc2330b9e0fdfcc1"}
res, err := collection.Find(context.Background(), filter)
res.All(context.TODO(), &resRecords)

for _, result := range resRecords {
	fmt.Println(result, "-=-=====-----==1~~~~")
}
插入多条数据
type Person struct {
	name  string
	age   int
	hobby []string
}
p1 := Person{
	name: "zs",
	age: 16,
	hobby: []string{"sport", "play"}
}

p2 := Person{
	name: "ls",
	age: 20,
	hobby: []string{"write", "play"}
}
pList := []interface{}{p1, p2}
ior, err := collection.InsertMany(context.Background(), pList)
更新数据
t := bson.M{"_id": oid}
update := bson.M{"$set": bson.M{"title": "更新明细任务编号"}}

result, err := collection.UpdateOne(context.Background(), t, update)
fmt.Println(result, "result========")

文章来源地址https://www.toymoban.com/news/detail-643573.html

到了这里,关于go练习 day02的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Golang:Go语言结构

    在我们开始学习 Go 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构。 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 表达式 注释 接下来让我们来看下简单的代码,该代码输出了\\\"Hello World!\\\": 让我们来看下以上程序的各个部分: 第一

    2024年02月10日
    浏览(57)
  • golang实现webgis后端开发

    目录 前言 二、实现步骤 1.postgis数据库和model的绑定 2.将pg库中的要素转换为geojson (1)几何定义 (2)将wkb解析为几何类型 (3)定义geojson类型 (4)数据转换 (5)数据返回  2.前端传入的geojson储存到数据库 3、其他功能实现 总结         停更了接近一个月都在研究一门新语言gola

    2024年02月08日
    浏览(49)
  • 【Golang】VScode配置Go语言环境

    安装VScode请参考我的上一篇博客:VScode安装_㫪548的博客-CSDN博客 接下来我们直接进入正题: Go语言(又称Golang)是一种开源的编程语言,由Google开发并于2009年首次发布。Go语言具有简洁、高效、可靠和易于阅读的特点,被设计用于解决大型项目的开发需求。它结合了静态类型

    2024年02月03日
    浏览(64)
  • 【GoLang】MAC安装Go语言环境

    小试牛刀 首先安装VScode软件 或者pycharm mac安装brew软件  brew install go 报了一个错误 不提供这个支持  重新brew install go 之后又重新brew reinstall go 使用go version 可以看到go 的版本 使用go env  可以看到go安装后的配置 配置一个环境变量 vim ~/.zshrc,  

    2024年02月15日
    浏览(56)
  • Go语言(Golang)数据库编程

    要想连接到 SQL 数据库,首先需要加载目标数据库的驱动,驱动里面包含着于该数据库交互的逻辑。 sql.Open() 数据库驱动的名称 数据源名称 得到一个指向 sql.DB 这个 struct 的指针 sql.DB 是用来操作数据库的,它代表了0个或者多个底层连接的池,这些连接由sql 包来维护,sql 包会

    2024年02月03日
    浏览(86)
  • 【Golang】Golang进阶系列教程--Go 语言数组和切片的区别

    在 Go 语言中,数组和切片看起来很像,但其实它们又有很多的不同之处,这篇文章就来说说它们到底有哪些不同。 数组和切片是两个常用的数据结构。它们都可以用于存储一组相同类型的元素,但在底层实现和使用方式上存在一些重要的区别。 Go 中数组的长度是不可改变的

    2024年02月15日
    浏览(57)
  • 【Golang】Golang进阶系列教程--Go 语言切片是如何扩容的?

    在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice)。 切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。 切片是一种引用类型,它有三个属性:指针,长度和容量。 底层源码定义如下: 指针: 指向

    2024年02月14日
    浏览(63)
  • 【Golang】Golang进阶系列教程--Go 语言 map 如何顺序读取?

    Go 语言中的 map 是一种非常强大的数据结构,它允许我们快速地存储和检索键值对。 然而,当我们遍历 map 时,会有一个有趣的现象,那就是输出的键值对顺序是不确定的。 先看一段代码示例: 当我们多执行几次这段代码时,就会发现,输出的顺序是不同的。 首先,Go 语言

    2024年02月14日
    浏览(65)
  • 【Golang】三分钟让你快速了解Go语言&为什么我们需要Go语言?

    博主简介: 努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。 博主主页: @是瑶瑶子啦 所属专栏: Go语言核心编程 近期目标: 写好专栏的每一篇文章 Go 语言从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关

    2023年04月21日
    浏览(59)
  • Golang区块链钱包_go语言钱包

    Golang区块链钱包的特点 Golang区块链钱包具有以下几个特点: 1. 高性能 Golang是一种编译型语言,具有快速的执行速度和较低的内存消耗。这使得Golang区块链钱包在处理大规模交易数据时表现出色,能够满足高性能的需求。 2. 并发支持 Golang内置了轻量级线程——goroutine,以及

    2024年04月15日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包