ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

使用 mgo 驱动在 Go 中操作 MongoDB:build-web-application-with-golang 第 5.6 章示例的运行与 CRUD 实战

使用 mgo 驱动在 Go 中操作 MongoDB:build-web-application-with-golang 第 5.6 章示例的运行与 CRUD 实战 文档教程【免费下载链接】build-web-application-with-golangA golang ebook intro how to build a web with golang项目地址https://gitcode.com/gh_mirrors/bu/build-web-application-with-golang点击查看免费下载本文以开源仓库 build-web-application-with-golang 中pt-br/code/src/apps/ch.5.6/mongodb/目录下的运行指南为核心完整讲解 MongoDB 示例程序的四个启动步骤并逐段剖析配套main.go中基于 mgo 驱动的连接、插入、更新、查询与删除全流程。读完本文你将能够在本仓库环境中独立安装并启动 MongoDB、拉取 mgo 依赖、运行示例代码并理解 mgo 会话模式、BSON 查询与集合操作等核心 API 的用法。一、示例在项目中的位置与配套关系本示例位于pt-br/code/src/apps/ch.5.6/mongodb/目录与pt-br/05.6.md书中第 5.6 节 NoSQL database直接对应。该节在讲解了 NoSQL 数据库的概念、Redis 及多个 Go 驱动之后专门介绍 MongoDB 与 mgo 驱动的用法。目录中仅有两个文件readme.md四步运行指南即本文展开的主体main.go使用labix.org/v2/mgo及bson子包实现的完整 CRUD 示例程序。同一章源码目录下还有pt-br/code/src/apps/ch.5.6/redis/readme.md与main.go构成 Redis、MongoDB 两个 NoSQL 存储的配套实验便于对照学习。二、四步运行指南从安装到执行原指南以四个步骤完整给出了从环境准备到程序执行的链路逐条展开如下。步骤 1安装并运行 MongoDBMongoDB 是面向文档的 NoSQL 数据库数据以类似 JSON 的文档形式内部编码为 BSON存储支持动态 schema。示例程序默认连接本地localhost:27017上的 MongoDB 服务因此第一步是安装 MongoDB 并保证服务处于运行状态。安装方式随操作系统不同而异仓库指南本身不限定发行版只要最终能提供可被mgo.Dial(localhost)访问的 MongoDB 实例即可。安装完成后可用mongod --version验证二进制是否就绪。步骤 2启动 MongoDB 守护进程 mongodMongoDB 的服务端进程是mongod需要显式启动它才能真正对外提供服务。默认情况下mongod监听27017端口示例程序mgo.Dial(localhost)即依赖这一默认端口。启动命令通常形如mongod若使用默认数据目录直接执行即可如需指定数据目录与端口可追加--dbpath、--port等参数但需保证程序中的连接地址与之匹配。启动后可通过另开终端执行mongosh或旧版mongo执行db.runCommand({ ping: 1 })等方式确认服务正常。步骤 3使用 go get 下载并安装远程依赖包示例程序依赖远程第三方包需要先拉取到本地 GOPATH 才能编译运行。main.go的 import 段声明了所需依赖import ( fmt labix.org/v2/mgo labix.org/v2/mgo/bson )因此对应的拉取命令为go get labix.org/v2/mgogo get会同时下载mgo及其子包bsonlabix.org/v2/mgo/bson的包路径前缀与labix.org/v2/mgo相同随主包一起解析并将其安装到 GOPATH 的 src 目录下。需要说明的是书中的pt-br/05.6.md章节示例使用的是同一驱动的另一导入路径gopkg.in/mgo.v2二者指向的 mgo 驱动是一致的选择哪个路径取决于示例代码实际书写形式以本仓库pt-br/code/src/apps/ch.5.6/mongodb/main.go为准应执行上述labix.org/v2/mgo的拉取。另需注意go get依赖可用的网络与正确的 GOPATH 配置。示例编写年代较早若在更新的 Go 版本与模块环境下运行可能需要额外设置GO111MODULEoff或改用 vendor/module 方式引入依赖建议结合本地 Go 工具链版本调整。步骤 4执行程序go run main.go依赖就绪后在示例目录下直接执行go run main.go程序将依次完成清空集合、插入两条文档、更新其中一条、按条件查询、再删除等操作并在标准输出打印 Inserting、Updating、Querying、Deleting 等阶段标记以及查询到的电话号码Phone: 555-0101。若 MongoDB 未启动mgo.Dial会返回连接错误并被checkError以 panic 方式抛出可用此现象快速判断环境问题。三、源码逐段解读一次完整的 CRUD 生命周期main.go规模不大却覆盖了 mgo 操作 MongoDB 的几乎所有基础 API是从零理解 mgo 用法的最佳样本。连接与会话模式设置session, err : mgo.Dial(localhost) checkError(err) defer session.Close() session.SetMode(mgo.Monotonic, true)mgo.Dial建立到 MongoDB 的会话sessiondefer session.Close()确保程序退出时释放连接。session.SetMode(mgo.Monotonic, true)将会话切换为单调monotonic一致性模式——这也正是pt-br/05.6.md章节示例中注释 Optional. Switch the session to a monotonic behavior 所描述的行为读写请求会路由到同一个节点以获得一致性更好的读取结果。获取集合句柄并清空旧数据const ( DB_NAME test DB_COLLECTION people ) c : session.DB(DB_NAME).C(DB_COLLECTION) err c.DropCollection() checkError(err)session.DB(test).C(people)取得test数据库中people集合的操作句柄DropCollection()在每次运行时清空该集合保证示例可重复执行而不会因残留数据干扰结果。Insert插入文档ale : Person{Ale, 555-5555} cla : Person{Cla, 555-1234} fmt.Println(Inserting) err c.Insert(ale, cla) checkError(err)mgo 直接以 Go 结构体作为文档模型。Person结构体的字段名Name、Phone会被序列化为 BSON 文档中的对应键type Person struct { Name string Phone string }c.Insert(ale, cla)一次调用即可批量插入多条记录。这与书中基于 struct 操作数据库是 Go 的惯用方式05.6 节原话 they are both based on structs. This is the Go way of doing things完全一致——mgo 与之前章节的 beedb ORM 一样都以结构体为中心。Update按条件更新fmt.Println(Updating) ale.Phone 555-0101 err c.Update(bson.M{name: Ale}, ale)bson.M是 mgo 提供的 map 类型用于构建查询/更新条件。c.Update(bson.M{name: Ale}, ale)表示找到name为Ale的第一条文档用ale变量当前的值整体替换。因此更新后Ale的电话变为555-0101。Find条件查询fmt.Println(Querying) result : Person{} err c.Find(bson.M{name: Ale}).One(result) checkError(err) fmt.Println(Phone:, result.Phone)c.Find(bson.M{name: Ale})构造查询游标.One(result)将匹配到的第一条文档解码进Person结构体随后打印result.Phone即可看到更新生效后的555-0101。这是 mgo 中最常见的按 BSON 条件查一条并反序列化模式。Remove删除文档fmt.Println(Deleting) err c.Remove(bson.M{name: Ale}) checkError(err)c.Remove(bson.M{name: Ale})删除第一条匹配条件的文档。至此示例完整覆盖了 CRUD 中的 CInsert、RFind、UUpdate、DRemove/Delete外加DropCollection的集合级清理。checkError统一的错误处理func checkError(err error) { if err ! nil { panic(err) } }除c.Update一行外每个可能出错的调用都经checkError统一检查出错即 panic 终止并输出错误信息。这一写法让示例保持简洁同时确保读者能第一时间发现运行异常。四、从章节到代码mgo、BSON 与文档模型pt-br/05.6.md对 MongoDB 的描述提供了理解main.go的理论背景MongoDB 以 JSON 风格的文档BSON 格式存储结构化数据采用动态 schema因此 integration of data in certain types of applications 更简单快速书中称 mgo 是当时最被看好的 MongoDB 驱动。示例代码正是这套文档模型的直接落地Go 结构体 ↔ BSON 文档Person的实例经序列化写入集合查询结果再反序列化回结构体bson.M条件构造器bson.M{name: Ale}对应文档中的name键匹配与 MongoDB 原生查询语法一一对应集合即表people集合中的每份文档对应一条记录但字段结构不必预先定义体现了与关系数据库的差异。章节示例使用gopkg.in/mgo.v2路径与仓库配套代码使用labix.org/v2/mgo路径在 API 层面几乎一致都通过mgo.Dial建立会话、session.DB(...).C(...)获取集合、c.Insert/c.Find(...).One(...)完成写入与读取。这也再次印证了该驱动的 API 设计在不同导入路径间保持稳定。五、与 Redis 示例的对照常量约定与连接地址同章的 Redis 示例pt-br/code/src/apps/ch.5.6/redis/readme.md采用了几乎相同的四步流程差别在于第二步要求按源码常量启动 Redis 服务DB_PORT 9191 DB_URL 127.0.0.1即 Redis 示例的连接参数地址127.0.0.1、端口9191与程序内DB_URL/DB_PORT常量强绑定必须先对齐再启动。而 MongoDB 示例的main.go则通过mgo.Dial(localhost)与常量DB_NAME、DB_COLLECTION分别约定连接目标、库名与集合名const ( DB_NAME test DB_COLLECTION people )两者对照可见本仓库源码的通用约定连接地址/库表集合参数集中在源码顶部运行前需确保实际服务与常量一致。六、常见问题与运行前提连接失败mgo.Dial(localhost)报错通常是mongod未启动、端口被占用或服务监听地址与localhost不一致。请先完成步骤 1、2 并确认服务可 ping。依赖拉取失败go get labix.org/v2/mgo失败多为网络受限或 GOPATH/模块模式配置问题。需先配置好 Go 环境再按步骤 3 重试在模块环境下可考虑按本地工具链调整依赖管理方式。重复运行程序每次启动都会DropCollection清空people集合因此可反复执行go run main.go而无需手动清理数据。多节点连接mgo 的Dial支持逗号分隔的多地址章节示例中的server1.example.com,server2.example.com但本示例固定使用单机localhost适合本地验证。参考路径清单运行指南pt-br/code/src/apps/ch.5.6/mongodb/readme.md示例源码pt-br/code/src/apps/ch.5.6/mongodb/main.go章节正文NoSQL 数据库pt-br/05.6.md同章 Redis 对照指南pt-br/code/src/apps/ch.5.6/redis/readme.md其他语言版本的同名示例de/code/src/apps/ch.5.6/mongodb/main.go、en/code/src/apps/ch.5.6/mongodb/main.go、fa/code/src/apps/ch.5.6/mongodb/main.go、th/code/src/apps/ch.5.6/mongodb/main.go赞分享文档教程【免费下载链接】build-web-application-with-golangA golang ebook intro how to build a web with golang项目地址https://gitcode.com/gh_mirrors/bu/build-web-application-with-golang点击查看免费下载相关推荐老 Mac 安装 macOS 11 到 15OpenCore Legacy Patcher 升级完整步骤指南老 Mac 安装 macOS 11 到 15OpenCore Legacy Patcher 升级完整步骤指南 OpenCore Legacy Patcher文档教程在 Go 中连接与操作 RedisBuild Web Application with Golang 第 5.6 节实战指南在 Go 中连接与操作 RedisBuild Web Application with Golang 第 5.6 节实战指南 导读 本文以开源仓库《Build文档教程用 Go 与 mgo 驱动操作 MongoDBch.5.6 示例程序的安装与 CRUD 实战用 Go 与 mgo 驱动操作 MongoDBch.5.6 示例程序的安装与 CRUD 实战 导读 本文围绕《Build Web Application w文档教程上一篇DeepSeek Harness 悬停卡片一键复制HoverCard copyText 交互契约与实现解析下一篇CANN pto-isa 测试套件入口脚本完全指南NPU ST 与 CPU 模拟仿真的构建、运行与参数详解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表