大名做网站,南宁新技术产业建设开发总公司网站,网站百度分享怎么做,wordpress 文章列表样式目录
MongoDB简介
MongoDB的优势
对比mysql的操作
goctl的mongodb代码生成
如何使用
go-zero中mogodb使用
mongodb官方驱动使用
model模型的方式使用
其他资源 MongoDB简介
mongodb是一种高性能、开源、文档型的nosql数据库#xff0c;被广泛应用于web应用、大数据以…目录
MongoDB简介
MongoDB的优势
对比mysql的操作
goctl的mongodb代码生成
如何使用
go-zero中mogodb使用
mongodb官方驱动使用
model模型的方式使用
其他资源 MongoDB简介
mongodb是一种高性能、开源、文档型的nosql数据库被广泛应用于web应用、大数据以及云计算领域。
在使用MongoDB之前需要先在您的系统中安装MongoDB。在Linux系统下可以通过如下命令安装
sudo apt-get install mongodb
MongoDB的优势
1. 强大的灵活性
MongoDB是一个面向文档的数据库它使用BSON二进制JSON格式来存储数据。相比之下MySQL是一个关系型数据库使用表格来存储数据。这使得MongoDB更加灵活可以存储不同结构的文档。例如我们可以在同一个集合中存储不同类型的文档而MySQL需要创建多个表来存储不同类型的数据。
2. 高性能的读写操作
由于MongoDB使用BSON格式存储数据并且数据存储在文档中它可以更快地读写数据。此外MongoDB还支持内置的复制和分片机制可用于处理高并发的读写操作。相比之下MySQL需要通过SQL查询语句来读写数据这通常比MongoDB的操作要慢一些。
3. 分布式扩展性
MongoDB可以轻松地进行水平扩展即通过添加更多的节点来增加存储容量和处理能力。这种分布式架构使得MongoDB能够处理大量数据和高并发请求。与之相比MySQL在处理大规模数据和高并发情况下的扩展性有限。
4. 灵活的数据模型
MongoDB的数据模型允许我们使用嵌套文档和数组来表示复杂的数据结构。这使得数据的存储和查询更加方便无需进行多个表之间的连接操作。例如我们可以在一个文档中存储一个订单及其相关的所有产品并且可以轻松地查询和更新这个文档。相比之下MySQL需要通过多个表和连接操作来实现类似的功能。
对比mysql的操作
在数据库的操作上与mysql有很大不同。毕竟一个是非关系型一个是关系型数据库。接下来从python代码上先来直观感受下二者的不同。
python操作mogodb示例
# MongoDB示例# 连接到MongoDB数据库
from pymongo import MongoClient
client MongoClient(mongodb://localhost:27017/)# 获取数据库和集合对象
db client[mydb]
collection db[mycollection]# 插入一条文档
data {name: John, age: 25}
collection.insert_one(data)# 查询文档
result collection.find_one({name: John})
print(result)# 关闭连接
client.close()
mysql的python 示例
-- MySQL示例-- 连接到MySQL数据库
import mysql.connector
cnx mysql.connector.connect(userroot, passwordpassword, hostlocalhost, databasemydb)-- 获取游标
cursor cnx.cursor()-- 插入一条记录
sql INSERT INTO mytable (name, age) VALUES (%s, %s)
values (John, 25)
cursor.execute(sql, values)
cnx.commit()-- 查询记录
sql SELECT * FROM mytable WHERE name John
cursor.execute(sql)
result cursor.fetchone()
print(result)-- 关闭连接
cursor.close()
cnx.close()
通过以上示例可以看到MongoDB使用了面向文档的操作方式数据以JSON格式存储在集合中并且不需要事先定义表结构。而MySQL需要使用SQL语句来进行数据的插入和查询需要提前定义表结构。
总的来说MongoDB在灵活性、高性能读写、分布式扩展性和灵活的数据模型方面相对于MySQL有许多优势。当处理需要存储和查询复杂数据结构、大规模数据和高并发请求时MongoDB是一个更好的选择。
goctl的mongodb代码生成
goctl model 为 goctl 提供的数据库模型代码生成指令目前支持 MySQL、PostgreSQL、Mongo 的代码生成MySQL 支持从 sql 文件和数据库连接两种方式生成PostgreSQL 仅支持从数据库连接生成。
goctl model 为go-zero下的工具模块中的组件之一目前支持MongoDB进行model层代码生成。官网有对MySQL的使用方法但是没有对MongoDB的使用进行讲解那么我下面介绍goctl model对MongoDB的使用方法。
Mongo 模型层代码的生成不同于 MySQLMySQL 可以从 scheme_information 库中读取到一张表的信息字段名称数据类型索引等 而 Mongo 是文档型数据库我们暂时无法从 db 中读取某一条记录来实现字段信息获取。
Usage: goctl model mongo [flags] Flags: --branch string The branch of the remote repo, it does work with --remote-c, --cache Generate code with cache [optional] -d, --dir string The target dir-e, --easy Generate code with auto generated CollectionName for easy declare [optional]-h, --help help for mongo--home string The goctl home path of the template, --home and --remote cannot be set at the same time, if they are, --remote has higher priority--remote string The remote git repo of the template, --home and --remote cannot be set at the same time, if they are, --remote has higher priorityThe git repo directory must be consistent with the https://github.com/zeromicro/go-zero-template directory structure--style string The file naming format, see [https://github.com/zeromicro/go-zero/tree/master/tools/goctl/config/readme.md]-t, --type strings Specified model type name各个参数的含义主要用的是 -e -dir -t -e表示的是生成一个简单的增删改查接口-dir是生成文档放在的目录 -t是生成文件的前缀名称 -c是带缓存的 如何使用
goctl model mongo -t User -dir model/user
如何生成model层代码执行以上命令即可很简单不需要提前编写什么模型文件以上命令将自动在model/user目录下生成模型框架代码如果需要扩展其他字段类型直接修改生成的usertypes.go文件。
过程如下
# enter user home
$ cd ~# make dir named demo
$ mkdir demo cd demo# generate mongo code by goctl
$ goctl model mongo --type User --dir cache --cache# view layout
$ tree
.
└── cache├── error.go├── usermodel.go├── usermodelgen.go└── usertypes.go1 directory, 4 filesgo-zero中mogodb使用
go-zero中mogodb的基础使用
package mainimport (contexttimegithub.com/globalsign/mgo/bsongithub.com/zeromicro/go-zero/core/stores/mongo.mongodb.org/mongo-driver/bson/primitive
)type Roster struct {Id primitive.ObjectID bson:_idCreateTime time.Time bson:createTimeDisplayName string bson:displayName
}func main() {model : mon.MustNewModel(mongodb://root:example127.0.0.1:27017, db, user)r : Roster{Id: primitive.NewObjectID(),CreateTime: time.Now(),DisplayName: Hello,}ctx : context.Background()_, err : model.InsertOne(ctx, r)if err ! nil {panic(err)}update : bson.M{$set: bson.M{displayName: Hello world,createTime: time.Now(),}}_, err model.UpdateByID(ctx, r.Id, update)if err ! nil {panic(err)}r.DisplayName Hello world!_, err model.ReplaceOne(ctx, bson.M{_id: r.Id}, r)if err ! nil {panic(err)}var tr Rostererr model.FindOne(ctx, tr, bson.M{_id: r.Id})if err ! nil {panic(err)}
}
mongodb官方驱动使用
再来看下在在golang中的mongodb官方驱动使用示例
package mainimport (contextloggo.mongodb.org/mongo-driver/bsongo.mongodb.org/mongo-driver/mongogo.mongodb.org/mongo-driver/mongo/options
)func main() {clientOptions : options.Client().ApplyURI(mongodb://localhost:27017)client, err : mongo.Connect(context.Background(), clientOptions)if err ! nil {log.Fatal(err)}defer client.Disconnect(context.Background())coll : client.Database(your_db_name).Collection(user)// 插入数据doc : user.User{Id: 1,Name: Alice,Email: aliceexample.com,}_, err coll.InsertOne(context.TODO(), doc)if err ! nil {log.Fatal(err)}// 查询数据var result user.Usererr coll.FindOne(context.TODO(), bson.M{_id: 1}).Decode(result)if err ! nil {log.Fatal(err)}log.Printf(Found user: %v, result)// 更新数据updateResult, err : coll.UpdateOne(context.TODO(),bson.M{_id: 1},bson.D{{$set, bson.D{{email, alice.updatedexample.com}}}},)if err ! nil {log.Fatal(err)}log.Printf(Modified count: %v, updateResult.ModifiedCount)// 删除数据deleteResult, err : coll.DeleteOne(context.TODO(), bson.M{_id: 1})if err ! nil {log.Fatal(err)}log.Printf(Deleted count: %v, deleteResult.DeletedCount)
}
model模型的方式使用
具体的实例化方法参照goctl模型层的使用在internal/svc/servicecontext.go 中完成模型的连接和实例化。比较简单具体根据需要更改。
package svcimport myprj/internal/config//手动代码
import myprj/rpc/modeltype ServiceContext struct {Config config.ConfigModel model.NewUserModel// 手动代码
}func NewServiceContext(c config.Config) *ServiceContext {return ServiceContext{Config: c,Model: model.NewUserModel(c.DataSource, c.Cache), // 手动代码}
}其他资源
[zeromicro/go-zero]关于mongo生成model方案讨论 - ABSoft
Release Release v1.1.6 · zeromicro/go-zero · GitHub
MongoDB统一数据查询钩子_go-zero mongodb-CSDN博客
使用goctl model 生成MongoDB操作模板_go生成mongodb定义-CSDN博客
go-zero mongo 创建事务_go-zero mongodb-CSDN博客
Go操作mongodb数据库方法示例_Golang_脚本之家
如何将 Go 与 MongoDB 结合使用-mysql教程-PHP中文网
MongoDB Go Driver - Go Driver v1.15
goctl model | go-zero Documentation
基本 CURD | go-zero Documentation
https://blog.51cto.com/u_16175516/6811965
百度安全验证 文章转载自: http://www.morning.nfzzf.cn.gov.cn.nfzzf.cn http://www.morning.nnwpz.cn.gov.cn.nnwpz.cn http://www.morning.jwmws.cn.gov.cn.jwmws.cn http://www.morning.rwdbz.cn.gov.cn.rwdbz.cn http://www.morning.gbkkt.cn.gov.cn.gbkkt.cn http://www.morning.kyzja.com.gov.cn.kyzja.com http://www.morning.rzbcz.cn.gov.cn.rzbcz.cn http://www.morning.gmswp.cn.gov.cn.gmswp.cn http://www.morning.jhwwr.cn.gov.cn.jhwwr.cn http://www.morning.kmjbs.cn.gov.cn.kmjbs.cn http://www.morning.sbncr.cn.gov.cn.sbncr.cn http://www.morning.tgwfn.cn.gov.cn.tgwfn.cn http://www.morning.fgxr.cn.gov.cn.fgxr.cn http://www.morning.clnmf.cn.gov.cn.clnmf.cn http://www.morning.srxhd.cn.gov.cn.srxhd.cn http://www.morning.ykwqz.cn.gov.cn.ykwqz.cn http://www.morning.4q9h.cn.gov.cn.4q9h.cn http://www.morning.ljngm.cn.gov.cn.ljngm.cn http://www.morning.wjplr.cn.gov.cn.wjplr.cn http://www.morning.mlckd.cn.gov.cn.mlckd.cn http://www.morning.njntp.cn.gov.cn.njntp.cn http://www.morning.dzdtj.cn.gov.cn.dzdtj.cn http://www.morning.fhbhr.cn.gov.cn.fhbhr.cn http://www.morning.mhnxs.cn.gov.cn.mhnxs.cn http://www.morning.qkwxp.cn.gov.cn.qkwxp.cn http://www.morning.qgtfl.cn.gov.cn.qgtfl.cn http://www.morning.ggxbyhk.cn.gov.cn.ggxbyhk.cn http://www.morning.joinyun.com.gov.cn.joinyun.com http://www.morning.lwgsk.cn.gov.cn.lwgsk.cn http://www.morning.rfwrn.cn.gov.cn.rfwrn.cn http://www.morning.btwrj.cn.gov.cn.btwrj.cn http://www.morning.lgcqj.cn.gov.cn.lgcqj.cn http://www.morning.qqpg.cn.gov.cn.qqpg.cn http://www.morning.tqrjj.cn.gov.cn.tqrjj.cn http://www.morning.sqmbb.cn.gov.cn.sqmbb.cn http://www.morning.dtrzw.cn.gov.cn.dtrzw.cn http://www.morning.jyjqh.cn.gov.cn.jyjqh.cn http://www.morning.jqllx.cn.gov.cn.jqllx.cn http://www.morning.qwrb.cn.gov.cn.qwrb.cn http://www.morning.pwfwk.cn.gov.cn.pwfwk.cn http://www.morning.rmpfh.cn.gov.cn.rmpfh.cn http://www.morning.yfrbn.cn.gov.cn.yfrbn.cn http://www.morning.fhyhr.cn.gov.cn.fhyhr.cn http://www.morning.vvbsxm.cn.gov.cn.vvbsxm.cn http://www.morning.kjlhb.cn.gov.cn.kjlhb.cn http://www.morning.ttnfc.cn.gov.cn.ttnfc.cn http://www.morning.tbksk.cn.gov.cn.tbksk.cn http://www.morning.xhxsr.cn.gov.cn.xhxsr.cn http://www.morning.jfnbh.cn.gov.cn.jfnbh.cn http://www.morning.jrsgs.cn.gov.cn.jrsgs.cn http://www.morning.dygsz.cn.gov.cn.dygsz.cn http://www.morning.zqcgt.cn.gov.cn.zqcgt.cn http://www.morning.nnpfz.cn.gov.cn.nnpfz.cn http://www.morning.klltg.cn.gov.cn.klltg.cn http://www.morning.yfzld.cn.gov.cn.yfzld.cn http://www.morning.saletj.com.gov.cn.saletj.com http://www.morning.nspzy.cn.gov.cn.nspzy.cn http://www.morning.wyjpt.cn.gov.cn.wyjpt.cn http://www.morning.gzzncl.cn.gov.cn.gzzncl.cn http://www.morning.lkmks.cn.gov.cn.lkmks.cn http://www.morning.tpqzs.cn.gov.cn.tpqzs.cn http://www.morning.snjpj.cn.gov.cn.snjpj.cn http://www.morning.mxgpp.cn.gov.cn.mxgpp.cn http://www.morning.jwbfj.cn.gov.cn.jwbfj.cn http://www.morning.znrlg.cn.gov.cn.znrlg.cn http://www.morning.pmlgr.cn.gov.cn.pmlgr.cn http://www.morning.jmlgk.cn.gov.cn.jmlgk.cn http://www.morning.ffptd.cn.gov.cn.ffptd.cn http://www.morning.jzfxk.cn.gov.cn.jzfxk.cn http://www.morning.sgpny.cn.gov.cn.sgpny.cn http://www.morning.rcjyc.cn.gov.cn.rcjyc.cn http://www.morning.zmwd.cn.gov.cn.zmwd.cn http://www.morning.huxinzuche.cn.gov.cn.huxinzuche.cn http://www.morning.hrzymy.com.gov.cn.hrzymy.com http://www.morning.xtqr.cn.gov.cn.xtqr.cn http://www.morning.yxwnn.cn.gov.cn.yxwnn.cn http://www.morning.kpnpd.cn.gov.cn.kpnpd.cn http://www.morning.zdhxm.com.gov.cn.zdhxm.com http://www.morning.lbzgt.cn.gov.cn.lbzgt.cn http://www.morning.gchqy.cn.gov.cn.gchqy.cn