MongoDB中间件工具mgm入门介绍(三)

举报
liuzhen007 发表于 2021/08/22 00:52:37 2021/08/22
【摘要】 目录 前言正文 数据库记录中的默认项数据库记录中的钩子函数数据库配置项 结尾 往期推荐博文: MongoDB中间件工具mgm入门介绍(一) MongoDB中间件工具mgm入门介绍(二) ...

目录

  • 前言
  • 正文
    • 数据库记录中的默认项
    • 数据库记录中的钩子函数
    • 数据库配置项
  • 结尾

往期推荐博文:

MongoDB中间件工具mgm入门介绍(一)

MongoDB中间件工具mgm入门介绍(二)

前言

众所周知,MongoDB 是一个通用、基于文档的分布式数据库,非常适合云原生服务的应用场景。上一篇文章已经简单介绍了 MongoDB 数据库的中间件工具 mgm 的一般使用方法,今天就来聊一聊 mgm 的高级使用方法。

正文

数据库记录中的默认项

在声明数据库模型时,如果使用 DefaultModel ,就会在数据库中生成记录时,自己生成三个默认项,分别是 _idcreated_atupdated_at。其中,_id表示文档记录的ID,created_at表示文档记录生成的时间、updated_at表示文档记录的更新时间,一般updated_at会比created_at较新,至少是相等的。

接下来,通过声明一个数据库模型结构体来了解一下这些默认项。

代码如下:

type File struct {
	mgm.DefaultModel `bson:",inline"` // 产生默认三项
	Name             string  `json:"name" bson:"name"`
	Md5              string  `json:"md5" bson:"md5"`
	Type             string  `json:"type" bson:"type"`
	Url              string  `json:"url" bson:"url"`
	Path             string  `json:"path" bson:"path"`
	FilePath         string  `json:"filepath" bson:"filepath"`
	Duration         float64 `json:"duration" bson:"duration"`
	CloudUrl         string  `json:"cloudurl" bson:"cloudurl"`
	Filekey          string  `json:"filekey" bson:"filekey"`
	MinioUrl         string  `json:"miniourl" bson:"miniourl"`
	MinioKey         string  `json:"miniokey" bson:"miniokey"`
	Size             int64   `json:"size" bson:"size"`
	Identifier       string  `json:"identifier" bson:"identifier"`
	ETag             string  `josn:"eTag" bson:"eTag"`
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

几条数据库记录截图如下:

image.png

从上图我们可以看到数据库记录中默认的三个字段( _idcreated_atupdated_at)。

数据库记录中的钩子函数

数据库中声明的每一个模型都是如下钩子函数:

  • Creating: 当创建一个新模型的时候触发。
  • Created: 当一个新模型被创建后触发。
  • Updating: 当正在更新一个模型时触发。
  • Updated : 当一个模型被更新后触发。
  • Saving: 当创建或者升级一个模型时触发。
  • Saved: 当一个模型被创建或者升级后触发。
  • Deleting: 当删除一个模型时触发。
  • Deleted: 当删除一个模型后触发。

其实,每一个数据库模型都会默认触发CreatingSaving两个钩子函数,如果你想定义自己的钩子函数,也要合理的利用默认的钩子函数,比如如下代码实例:

func (model *Book) Creating() error {
   // 调用默认的 Creating 钩子函数
   if err := model.DefaultModel.Creating(); err!=nil {
      return err
   }

   // 定义自己的校验逻辑
   if model.Pages < 0 {
      return errors.New("page paramter error")
   }

   return nil
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

另外,可以触发上述钩子函数的方法有很多,比如CreateCreateWithCtxUpdateUpdateWithCtxDeleteDeleteWithCtx

数据库配置项

这里需要说明一个非常重要的数据库配置项——上下文超时时间,这个在实际使用过程,自己曾多次踩坑,特别是当网络非常差的时候,当访问数据库时总是莫名其妙的连接失败,最终定位原来问题出在了这里。

因此,建议在我们使用 mgm 的时候,一定要设置一个合适的上下文超时时间,本人项目的代码实例如下:

func SetupMongoDB() error {
	err := mgm.SetDefaultConfig(&mgm.Config{CtxTimeout: 10 * time.Second}, *config.GetConfig().Mongo.Db,
		options.Client().ApplyURI(*config.GetConfig().Mongo.Url))
	return err
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

结尾

好了,今天关于 mgm 的高级使用方法就介绍这么多,晚安😴 !大家好,我是 liuzhen007(Data-Mining),欢迎关注,分享更多服务器和数据库的知识。

文章来源: liuzhen.blog.csdn.net,作者:Data-Mining,版权归原作者所有,如需转载,请联系作者。

原文链接:liuzhen.blog.csdn.net/article/details/119833125

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。