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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
云原生网关 MSE Higress,422元/月
性能测试 PTS,5000VUM额度
简介: 众所周知,MongoDB 是一个通用、基于文档的分布式数据库,非常适合云原生服务的应用场景。上一篇文章已经简单介绍了 MongoDB 数据库的中间件工具 mgm 的一般使用方法,今天就来聊一聊 mgm 的高级使用方法。

前言

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

正文

数据库记录中的默认项

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

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

代码如下:

typeFilestruct {
mgm.DefaultModel`bson:",inline"`// 产生默认三项Namestring`json:"name" bson:"name"`Md5string`json:"md5" bson:"md5"`Typestring`json:"type" bson:"type"`Urlstring`json:"url" bson:"url"`Pathstring`json:"path" bson:"path"`FilePathstring`json:"filepath" bson:"filepath"`Durationfloat64`json:"duration" bson:"duration"`CloudUrlstring`json:"cloudurl" bson:"cloudurl"`Filekeystring`json:"filekey" bson:"filekey"`MinioUrlstring`json:"miniourl" bson:"miniourl"`MinioKeystring`json:"miniokey" bson:"miniokey"`Sizeint64`json:"size" bson:"size"`Identifierstring`json:"identifier" bson:"identifier"`ETagstring`josn:"eTag" bson:"eTag"`}

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

网络异常,图片无法展示
|

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

数据库记录中的钩子函数

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

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

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

func (model*Book) Creating() error {
// 调用默认的 Creating 钩子函数iferr :=model.DefaultModel.Creating(); err!=nil {
returnerr   }
// 定义自己的校验逻辑ifmodel.Pages<0 {
returnerrors.New("page paramter error")
   }
returnnil}

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

数据库配置项

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

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

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

结尾

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



作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!😄

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
14天前
|
NoSQL MongoDB
MongoDB入门-sort和投影
这篇文章介绍了MongoDB中的排序(sort)和投影(projection)操作,通过示例代码展示了如何使用这些功能来控制查询结果的排序顺序和返回的字段。
27 3
MongoDB入门-sort和投影
|
14天前
|
NoSQL MongoDB
MongoDB入门-MongoDB的CURD语句练习
这篇文章提供了MongoDB的CURD操作的练习,涵盖了插入、查询、更新和删除数据的基本命令,并通过具体示例展示了如何在MongoDB中执行这些操作。
31 2
|
23天前
|
NoSQL BI 数据处理
【超实用攻略】MongoDB 聚合框架:从入门到精通,带你解锁数据处理新姿势!
【8月更文挑战第24天】MongoDB是一款以其灵活性和高性能闻名的NoSQL数据库。其强大的聚合框架采用管道式处理,允许用户定义多个数据处理阶段如过滤、分组等。本文通过示例数据库`orders`和`products`,演示如何利用聚合框架计算各产品的总销售额。示例代码展示了使用`$lookup`连接两集合、`$unwind`打平数组及`$group`按产品ID分组并计算总销售额的过程。这突显了聚合框架处理复杂查询的强大能力,是进行数据分析和报表生成的理想选择。
28 3
|
16天前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
33 0
|
19天前
|
前端开发 中间件 索引
Django入门到放弃之中间件
Django入门到放弃之中间件
|
19天前
|
存储 中间件 PHP
Python编程入门:从零到一的代码实践深入理解 PHP 中的中间件模式
【8月更文挑战第28天】本文旨在通过浅显易懂的方式,向初学者介绍Python编程的基础知识,并结合具体代码示例,带领读者一步步实现从零基础到能够独立编写简单程序的转变。文章将围绕Python语言的核心概念进行讲解,并通过实例展示如何应用这些概念解决实际问题。无论你是编程新手还是希望扩展技能的专业人士,这篇文章都将为你打开编程世界的大门。 【8月更文挑战第28天】在PHP的世界中,设计模式是构建可维护和可扩展软件的重要工具。本文将通过浅显易懂的语言和生动的比喻,带领读者深入理解中间件模式如何在PHP应用中发挥魔力,实现请求处理的高效管理。我们将一步步揭开中间件的神秘面纱,从它的定义、工作原理到
|
3月前
|
NoSQL Linux MongoDB
MongoDB提供的这些工具
【6月更文挑战第8天】MongoDB提供的这些工具
70 6
|
3月前
|
NoSQL 数据可视化 关系型数据库
MongoDB提供的这些工具
【6月更文挑战第8天】MongoDB提供的这些工具
36 3
|
2月前
|
NoSQL MongoDB 数据库
MongoDB的GUI工具——Robo 3T连接远程数据库MongoDB
MongoDB的GUI工具——Robo 3T连接远程数据库MongoDB
142 0
|
3月前
|
NoSQL 数据可视化 前端开发
MongoDB可视化工具Robo 3T的下载、安装与使用介绍
【6月更文挑战第3天】该文介绍了如何下载和安装MongoDB的图形化工具Robo 3T。首先,建议在开始之前安装MongoDB。然后,访问Robo 3T官网下载安装包,接受条款并选择适合的操作系统版本(此处以Windows 64位为例)。下载后,运行安装程序,依次点击&quot;Next&quot;,选择安装路径,等待安装完成。安装后,启动Robo 3T,同意用户协议,免费激活并登录或注册账号。最后,按照提示完成配置步骤。
191 1