如何确认mongodb数据插入是否成功_go连接mongodb
mongodb介绍
mongodb是基于分布式文件存储的数据库,一条数据存储为一个文档document,数据结构是由key-value对组成,文档类类似于平时使用的json对象。文档中字段值可以包含其他的文档,数组以及文档数组。
mongodb和sql对比
mongodb术语 | 说明 | MySQL术语 |
database | 数据库 | database |
collection | 集合/表 | table |
document | 文档/行 | row |
field | 字段 | column |
index | 索引 | index |
primary key | 主键 | primary key |
官网下载安装官方下载地址 社区版本,安装教程
启动mongodb数据库
windows:
C:\Program Files\MongoDB\Server\4.4\bin\mongod.exe --dbpath="F:\mongodb\MongoDB\Server\4.4\data\db"
mac:
mongod --config /usr/local/etc/mongod.conf或者brew services start mongodb-community@4.4
启动客户端:
C:\Program Files\MongoDB\Server\4.4\bin或者到这个目录双击打开
mac启动客户端命令:mongo
常用命令
show dbs;查看数据库
> show dbs;admin 0.000GBconfig 0.000GBlocal 0.000GB
use user;切换到指定数据库,如果不存在就创建。
db;显示当前数据库
> use user;switched to db user> db;user
db.dropDatabase(); 删除当前数据库
db.createCollection(name,options):创建数据集
说明:
name:数据集名称
options:可选参数,指定内存大小和索引。
> db.createCollection("wyc");{ "ok" : 1 }
show collections;:查看当前数据库中所有集合。
db.wyc.drop(); 删除指定指定数据集wyc
> show collections;wyc> db.wyc.drop();true
CURD
插入一条文档:
> db.wyc.insertOne({name:"wyc",age:1}){"acknowledged" : true,"insertedId" : ObjectId("5fbe269893d80a6d65402c6a")}
插入多条文档:
> db.wyc.insertMany([{name:"www",age:1},{name:"yyy",age:2}]){ "acknowledged" : true, "insertedIds" : [ ObjectId("5fbe270093d80a6d65402c6b"), ObjectId("5fbe270093d80a6d65402c6c") ]}
查看所有文档:
> db.wyc.find();{ "_id" : ObjectId("5fbe269893d80a6d65402c6a"), "name" : "wyc", "age" : 1 }{ "_id" : ObjectId("5fbe270093d80a6d65402c6b"), "name" : "www", "age" : 1 }{ "_id" : ObjectId("5fbe270093d80a6d65402c6c"), "name" : "yyy", "age" : 2 }
查看age>1的文档
> db.wyc.find({age:{$gt:1}}){ "_id" : ObjectId("5fbe270093d80a6d65402c6c"), "name" : "yyy", "age" : 2 }
更新文档:
db.collection.update( <query>, <update>, { upsert: , multi: , writeConcern: })
参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
> db.wyc.update({name:"www"},{age:2})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.wyc.find();{ "_id" : ObjectId("5fbe269893d80a6d65402c6a"), "name" : "wyc", "age" : 1 }{ "_id" : ObjectId("5fbe270093d80a6d65402c6b"), "age" : 2 }{ "_id" : ObjectId("5fbe270093d80a6d65402c6c"), "name" : "yyy", "age" : 2 }
这个更新将条件name=www的更新为后面的对象,竟然将name也删除了。使用一下可选项upsert插入一条name=www的
> db.wyc.update({age:"2"},{name:"www",age:2},{upsert:true})WriteResult({"nMatched" : 0,"nUpserted" : 1,"nModified" : 0,"_id" : ObjectId("5fbe294e599bcf446394b304")})> db.wyc.find();{ "_id" : ObjectId("5fbe269893d80a6d65402c6a"), "name" : "wyc", "age" : 1 }{ "_id" : ObjectId("5fbe270093d80a6d65402c6b"), "age" : 2 }{ "_id" : ObjectId("5fbe270093d80a6d65402c6c"), "name" : "yyy", "age" : 2 }{ "_id" : ObjectId("5fbe294e599bcf446394b304"), "name" : "www", "age" : 2 }
删除一条记录:
> db.wyc.deleteOne({age:2}){ "acknowledged" : true, "deletedCount" : 1 }> db.wyc.find();{ "_id" : ObjectId("5fbe269893d80a6d65402c6a"), "name" : "wyc", "age" : 1 }{ "_id" : ObjectId("5fbe270093d80a6d65402c6c"), "name" : "yyy", "age" : 2 }{ "_id" : ObjectId("5fbe294e599bcf446394b304"), "name" : "www", "age" : 2 }
go操作mongodb
安装驱动:
go get go.mongodb.org/mongo-driver/mongo
package mainimport ( "context" "fmt" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "log" "time")func main() { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017")) if err != nil { log.Fatal(err) } err = client.Ping(context.TODO(), nil) if err != nil { log.Fatal(err) } defer func() { if err = client.Disconnect(ctx); err != nil { panic(err) } }() fmt.Println("Connected to MongoDB!")}
BSON
BSON是一种二进制存储格式,和json一样,支持内嵌的文档对象和数组对象,还有json没有的Date和BinData类型。链接mongodb的go驱动程序中有两大类型表示BSON数据:D和Raw。
类型D被用来构建本地Go类型的BSON对象,包括:
D:BSON文档
M:无序map,和D类似不保证顺序
A:一个BSON数组
E:D里面的一个元素
插入一条数据
collection := client.Database("user").Collection("wyc")s1 := Wyc{Name: "ccc",Age: 3}insertResult, err := collection.InsertOne(context.TODO(), s1)if err != nil { log.Fatal(err)}fmt.Println("Inserted a single document: ", insertResult.InsertedID)> Inserted a single document: ObjectID("5fbf65dc33fed9732aa24843")
如上链接成功mongodb,获取user库wyc文档的链接,插入一条name=ccc,age=3的数据,执行之后插入成功。
插入多条数据
collection := client.Database("user").Collection("wyc")s2 := Wyc{Name: "abc",Age: 4}s3 := Wyc{Name: "aaa",Age: 5}students := []interface{}{s2, s3}insertManyResult, err := collection.InsertMany(context.TODO(), students)if err != nil { log.Fatal(err)}fmt.Println("Inserted multiple documents: ", insertManyResult.InsertedIDs)
更新文档
updateOne()方法允许更新单个文档。需要一个一个筛选器来匹配文档,可以使用BSON.D来构建筛选文档和更新文档:
collection := client.Database("user").Collection("wyc")opts := options.Update().SetUpsert(true)filter := bson.D{{"name", "aaa"}}update := bson.D{{"$set", bson.D{{"email", "aaa@example.com"}}}}result, err := collection.UpdateOne(context.TODO(), filter, update, opts)if err != nil { log.Fatal(err)}if result.MatchedCount != 0 { fmt.Println("matched and replaced an existing document") return}if result.UpsertedCount != 0 { fmt.Printf("inserted a new document with ID %v\n", result.UpsertedID)}
设置SetUpsert属性为真,当name=aaa记录存在就更新这条记录,不存在就插入这条数据,这条语句为name=aaa的记录增加了一个属性email。
> db.wyc.find();{ "_id" : ObjectId("5fbe269893d80a6d65402c6a"), "name" : "wyc", "age" : 1 }{ "_id" : ObjectId("5fbe270093d80a6d65402c6c"), "name" : "yyy", "age" : 2 }{ "_id" : ObjectId("5fbe294e599bcf446394b304"), "name" : "www", "age" : 2 }{ "_id" : ObjectId("5fbf65dc33fed9732aa24843"), "name" : "ccc", "age" : 3 }{ "_id" : ObjectId("5fbf66e1cdb37aa53dc3a201"), "name" : "abc", "age" : 4 }{ "_id" : ObjectId("5fbf66e1cdb37aa53dc3a202"), "name" : "aaa", "age" : 5, "email" : "aaa@example.com" }
查找文档
collection := client.Database("user").Collection("wyc")opts := options.Find().SetSort(bson.D{{"age", -1}})var results []*Wyccur, err := collection.Find(context.TODO(), bson.D{{"name", "aaa"}}, opts)if err != nil { log.Fatal(err)}for cur.Next(context.TODO()) { // 创建一个值,将单个文档解码为该值 var elem Wyc err := cur.Decode(&elem) if err != nil { log.Fatal(err) } results = append(results, &elem)}if err := cur.Err(); err != nil { log.Fatal(err)}// 完成后关闭游标cur.Close(context.TODO())a ,_ := json.Marshal(results)fmt.Println("found document",string(a))
查询name=aaa的,根据age的大小倒叙排序的文档。
> db.wyc.find({name:"aaa"}){ "_id" : ObjectId("5fbf66e1cdb37aa53dc3a202"), "name" : "aaa", "age" : 5, "email" : "aaa@example.com" }{ "_id" : ObjectId("5fbf6cba46c14449ab7f5f57"), "name" : "aaa", "age" : 6 }{ "_id" : ObjectId("5fbf6cba46c14449ab7f5f58"), "name" : "aaa", "age" : 7 }{ "_id" : ObjectId("5fbf6cba46c14449ab7f5f59"), "name" : "aaa", "age" : 8 }{ "_id" : ObjectId("5fbf6cba46c14449ab7f5f5a"), "name" : "aaa", "age" : 9 }
程序执行结果:
found document [{"Name":"aaa","Age":9},{"Name":"aaa","Age":8},{"Name":"aaa","Age":7},{"Name":"aaa","Age":6},{"Name":"aaa","Age":5}]
更多查看官方文档:
https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo#section-documentation
如何确认mongodb数据插入是否成功_go连接mongodb相关推荐
- 获取mongodb数据变更_支持mysql、MongoDB数据变更订阅/监听分发
1 概述 mysql.MongoDB数据变动监听分发 本项目意在简化监听mysql.MongoDB数据库的不同表的各种数据变动 项目依赖redis,mysql 使用场景:刷新缓存.异构系统... 2 ...
- MongoDB的客户端管理工具--nosqlbooster 连接MongoDB服务器
nosqlbooster的官网地址为https://nosqlbooster.com.大家如果想直接下载,可以登入下载网址https://nosqlbooster.com/downloads. 下载w ...
- python 连接mysql数据插入不成功
commit()函数 代码没问题,大多数情况是缺少了commit()函数,在末尾加上即可正常显示 上面是原本的代码,运行程序执行成功没有报错,但是看sql数据库没有插入成功,试了很多方法,最后发现在p ...
- 查看mongodb数据路径_【数据库】mongodb数据库安装
简介 本文简单介绍mongodb主从备份安装.包括两部分: 数据库安装 主从配置 安装数据库 1.配置yum源 cd /etc/yum.repos.d vi mongodb-org-4.0.repo ...
- 通过nodejs插入删除MongoDB数据
通过nodejs插入删除MongoDB数据 首先确保你已经启动了Mongodb数据库服务(mongoDB默认的端口号是:27017) nodejs端,插入数据代码: var MongoClient = ...
- mongodb 批量插入_MongoDB批量插入– MongoDB插入很多
mongodb 批量插入 We will look into MongoDB bulk insert today. Multiple documents can be inserted at a ti ...
- golang 撤回_golang 连接mongoDB的方法示例
Mogondb 不支持事务.所有有事务要求的需求慎用,比如银行的转账操作慎用,转1个亿美金,因为网络,电力的故障导致交易没有完成,不能回滚,交易无法撤回.所有慎用!! Mogondb 的应用场景: 比 ...
- 使用node连接MongoDB的工具安装及配置
MongoDB的使用 Mac安装: https://www.cnblogs.com/weixuqin/p/7258000.html MongoDB的可视化工具: https://robomongo.o ...
- dbKoda连接mongodb出现ConnectNamedPipe Failed错误
最近使用 dbKoda 连接 mongodb 数据库出现错误 1. dbKoda连接mongodb出现ConnectNamedPipe Failed错误 出错提示如下: Error lauching ...
最新文章
- 华为CodeCraft2017算法结果检查工具(包含测试用例展示)
- 每日 30 秒之 对海量数据进行切割
- 阿里摩酷实验室CV实习生和社招
- 如何让网站文章秒收录
- python配置文件转dict
- Cocos2dx 学习之CCTableView
- kettle使用文件导入到Postgresql出现如下几种问题的总结
- sql中的join问题
- centos 7 64位虚机上android4环境运行
- 浅谈Tomcat的启动流程(源码级别)
- TR外汇黑平台资金盘深度揭秘,谨防上当受骗,迟早会跑路
- 揭作家身体健康堪忧内幕 玩命写作自觉还是自虐
- 基于微信小程序的超市购物系统
- 撤销性CP-ABE方案研究现状总结 - 2021
- 详解如何在npmjs上上传和更新属于自己的组件库
- ffmpeg如何实现MP3转码g711a,
- Python+IDM实现百度网盘批量下载
- 大二计算机专业可以进实验室吗,计算机科学论坛--关于北大CS报考、复试以及实验室综合答疑,08考生必看[原创]...
- 如何把项目改成微服务项目_微服务拆分那点事
- 【趋势科技实习录】 PIT testing with OSCE11
热门文章
- android系统的测试方法,运行测试 | Android 开源项目 | Android Open Source Project...
- pip 安装指定版本
- Django用来作为爬虫框架浅谈
- C# string.Empty
- mysql性能优化之sql语句优化最强合集
- blast | diamond 输出结果选择和解析 | 比对
- Android实用代码七段(五)
- Qcon大会归来(r12笔记第36天)
- Unity3D的坑系列:动态加载dll
- pageResponse - 让H5适配移动设备全家(移动端适配)1