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对象,包括:

  1. D:BSON文档

  2. M:无序map,和D类似不保证顺序

  3. A:一个BSON数组

  4. 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相关推荐

  1. 获取mongodb数据变更_支持mysql、MongoDB数据变更订阅/监听分发

    1 概述 mysql.MongoDB数据变动监听分发 本项目意在简化监听mysql.MongoDB数据库的不同表的各种数据变动 项目依赖redis,mysql 使用场景:刷新缓存.异构系统... 2 ...

  2. MongoDB的客户端管理工具--nosqlbooster 连接MongoDB服务器

    nosqlbooster的官网地址为https://nosqlbooster.com.大家如果想直接下载,可以登入下载网址https://nosqlbooster.com/downloads. 下载w ...

  3. python 连接mysql数据插入不成功

    commit()函数 代码没问题,大多数情况是缺少了commit()函数,在末尾加上即可正常显示 上面是原本的代码,运行程序执行成功没有报错,但是看sql数据库没有插入成功,试了很多方法,最后发现在p ...

  4. 查看mongodb数据路径_【数据库】mongodb数据库安装

    简介 本文简单介绍mongodb主从备份安装.包括两部分: 数据库安装 主从配置 安装数据库 1.配置yum源 cd /etc/yum.repos.d vi mongodb-org-4.0.repo ...

  5. 通过nodejs插入删除MongoDB数据

    通过nodejs插入删除MongoDB数据 首先确保你已经启动了Mongodb数据库服务(mongoDB默认的端口号是:27017) nodejs端,插入数据代码: var MongoClient = ...

  6. mongodb 批量插入_MongoDB批量插入– MongoDB插入很多

    mongodb 批量插入 We will look into MongoDB bulk insert today. Multiple documents can be inserted at a ti ...

  7. golang 撤回_golang 连接mongoDB的方法示例

    Mogondb 不支持事务.所有有事务要求的需求慎用,比如银行的转账操作慎用,转1个亿美金,因为网络,电力的故障导致交易没有完成,不能回滚,交易无法撤回.所有慎用!! Mogondb 的应用场景: 比 ...

  8. 使用node连接MongoDB的工具安装及配置

    MongoDB的使用 Mac安装: https://www.cnblogs.com/weixuqin/p/7258000.html MongoDB的可视化工具: https://robomongo.o ...

  9. dbKoda连接mongodb出现ConnectNamedPipe Failed错误

    最近使用 dbKoda 连接 mongodb 数据库出现错误 1. dbKoda连接mongodb出现ConnectNamedPipe Failed错误 出错提示如下: Error lauching ...

最新文章

  1. 华为CodeCraft2017算法结果检查工具(包含测试用例展示)
  2. 每日 30 秒之 对海量数据进行切割
  3. 阿里摩酷实验室CV实习生和社招
  4. 如何让网站文章秒收录
  5. python配置文件转dict
  6. Cocos2dx 学习之CCTableView
  7. kettle使用文件导入到Postgresql出现如下几种问题的总结
  8. sql中的join问题
  9. centos 7 64位虚机上android4环境运行
  10. 浅谈Tomcat的启动流程(源码级别)
  11. TR外汇黑平台资金盘深度揭秘,谨防上当受骗,迟早会跑路
  12. 揭作家身体健康堪忧内幕 玩命写作自觉还是自虐
  13. 基于微信小程序的超市购物系统
  14. 撤销性CP-ABE方案研究现状总结 - 2021
  15. 详解如何在npmjs上上传和更新属于自己的组件库
  16. ffmpeg如何实现MP3转码g711a,
  17. Python+IDM实现百度网盘批量下载
  18. 大二计算机专业可以进实验室吗,计算机科学论坛--关于北大CS报考、复试以及实验室综合答疑,08考生必看[原创]...
  19. 如何把项目改成微服务项目_微服务拆分那点事
  20. 【趋势科技实习录】 PIT testing with OSCE11

热门文章

  1. android系统的测试方法,运行测试  |  Android 开源项目  |  Android Open Source Project...
  2. pip 安装指定版本
  3. Django用来作为爬虫框架浅谈
  4. C# string.Empty
  5. mysql性能优化之sql语句优化最强合集
  6. blast | diamond 输出结果选择和解析 | 比对
  7. Android实用代码七段(五)
  8. Qcon大会归来(r12笔记第36天)
  9. Unity3D的坑系列:动态加载dll
  10. pageResponse - 让H5适配移动设备全家(移动端适配)1