IT评测·应用市场-qidao123.com

标题: MongoDB官网下载不了, MongoDB下载、安装、配置、使用,如何下载MongoDB数 [打印本页]

作者: 饭宝    时间: 2025-3-6 06:28
标题: MongoDB官网下载不了, MongoDB下载、安装、配置、使用,如何下载MongoDB数
MongoDB 是一种基于文档的非关系(NoSQL)数据库,为开发者提供了高性能、高可用性和易用性的灵活且高效的数据存储办理方案。在当今快速发展的软件开发领域,开发者必要一个能够快速适应变化、处理大量数据而且易于扩展的数据库办理方案。
  MongoDB 官网https://www.mongodb
.com
[img]https://img-blog.csdnimg.cn/img_convert/d7a88bf380e7740edb
a70fb7d753bdb
9.png[/img]
https://www.mongodb
.com/

二、MongoDB数据库下载:

   **注:**由于MongoDB 官网要求登录以后才能进入下载页面(否则即便进入下载页面也会重定向到用户登录页面),所以假如想要下载官方原版的MongoDB数据库,要先登录(没有账户可以注册)后再进入下载页面去下载。
  1、官方下载地点:

https://www.mongodb
.com/try/download
[img]https://img-blog.csdnimg.cn/img_convert/d7a88bf380e7740edb
a70fb7d753bdb
9.png[/img]
https://www.mongodb
.com/try/download


在这里根据自己的必要,选择下载对应系统的MongoDB数据库版本(:在MongoDB版本中,是偶数:如3.2.x、3.4.x、3.6.x表示正式版【可用于生产环境】,是奇数:3.1.x、3.3.x、3.5.x表示开发版,而OS系统版本:自动给你推荐你当前得当的MongoDB数据库版本)。
然后点击 Download按扭后,进入下载页面:

注:进入上面这个下载页面后,会自动开始下载!!!(如没反应就F5 刷新一下当前页面,由于是外网,所以就耐心点吧!)。
2、其他下载方式:除了上面的下载方式以外,也可以试试下面的下载链接!!

三、MongoDB数据库的安装:

MongoDB的安装非常简单,在下载完成后,接直接双击下载好的MongoDB安装包,进入MongoDB安装界面,点击Next下一步、同意条款、选择安装路径 和 日记路径、勾选是否安装MongoDB Compass(MongoDB数据库图形管理工具,类似MySQL的Navicat ),别的的步调不绝点下一步直到完成安装就OK啦。
点击开始安装:

选择MongoDB安装方式:

选择MongoDB安装路径:
留意:MongoDB 3.x系列版本的数据库,在安装乐成后,每次在使用前都必要手动启动MongoDB服务!
  1. 启动命令:
  2. mongod --db
  3. path 数据库路径
  4. 如:
  5. mongodb
  6. --db
  7. apth D:/database/mydb
复制代码
现在:MongoDB 4.x系列版本的数据库,在安装时默认安装(选中了 Install MongoD as a Service)服务 ,就是在开机时自动启动 MongoDB 服务,然后就可以直接使用啦!
  1. // 在Windows环境下:
  2. 1、运行 Win + R
  3. 2、输入 services.msc 命令便可以查看到 MongoDB Server (MongoDB) 服务啦!!
复制代码
MongoDB 4.x安装具体如下所示:

选择MongoDB数据库图形化界面管理工具:

然后就不绝下一步、Next 直到 Flnish 安装完毕,到此就MongoDB就安装结束啦!

四、MongoDB数据库可视(图形)化管理工具:

1、下载地点:MongoDB Compass Download | MongoDB


2、留意事项:在MongoDB Compass选择下载时,可选择对应的系统版本(这里以windows系统为例):


下面是Msi安装版,安装界面:

MongoDB Compass的安装没有什么好配置的,直接点击 Next 至到 Flnish 就安装结束啦!

MongoDB数据库的图形化的数据库管理工具,可以在这里面对数据举行很友好的操纵:如查察、编辑、导入、导出等相应的。

五、文件功能解释:

1、MongoDB v3.6版安装目次的文件

  1. MongoDB v3.6版 安装目录:C:\Program Files\MongoDB\Server\3.6\bin
复制代码

2、 MongoDB v4.4版安装目次文件

  1. MongoDB v4.4版 安装目录:C:\Program Files\MongoDB\Server\4.4\bin
复制代码

六、环境变量配置:

1、配置MongoDB全局环境变量(就是在电脑中任何地方都可以适用mongo、mongod等命令)!


**注:配置完成后,重启电脑, 环境变量才收效哦!**重启后,我们就能在系统的任何位置,使用mongo命令了:
如:查察MongoDB数据库存的版本:
  1. mongod -version
  2. // 该命令会显示MongoDB数据库的相关信息,如果能显示信息,就表示已安装成功了!!!
复制代码
2、MongoDB数据库中的常用述语:

1、在MongoDB中,数据库是以文件情势存储的,数据库目次中存储了相应的数据库!
2、在MongoDB中,把传统数据库中的 "表" 叫作:Collections "集合"
3、在MongoDB中,向集合存储数据时,直接以JSON格式,举行存储 和 读取操纵!
4、在MongoDB中,集合中的数据内容叫作:Documents "文档"
3、进入MongoDB数据库的语法环境:

在命令窗口中,输入 mongo 回车, 就进入了MongoDB数据库的语法环境了!
注:安装好MongoDB数据库后,默认是【非授权模式】(也就是不必要任何权限验证,直接在命令窗口中输入 mongo 回车,就连接上了)。
MongoDB默认IP:mongodb
://127.0.0.1

MongoDB默认端口:27017
完备的IP+端口就是:mongodb
://127.0.0.1:27017
mongodb
://localhost:27017


七、MongoDB账户权限配置:

由于:安装好MongoDB数据库后,默认是【非授权模式】(也就是不必要任何权限验证、不必要验证账户,直接在命令窗口中输入 mongo 回车,就可以举行相关操纵),这是非常不安全的(尤其是在生产环境中,固然假如是自己玩玩的话就无所谓了)!!
所以:为了数据的安全,我们都应该去配置数据库的访问权限 和 修改默认(mongodb
://127.0.0.1:27017)连接绑定IP 和 端标语!!

1、创建MongoDB管理用户:


  1. #1、进入mongo语法环境
  2. mongo 127.0.0.1:27017
  3. #2、切换到admin数据库(默认就存在的管理数据库)
  4. use admin
  5. #3、添加管理员用户(用户名root 和 密码xxx 是可以自定义的 【但是要记牢哦!!】)
  6. db
  7. .createUser({
  8.     user:"root",
  9.     pwd:"xxxxxx",
  10.     roles: ["root"]    // 角色 root 是超级管理用户权限
  11. })
复制代码

  1. #1、进入mongo语法环境
  2. mongo 127.0.0.1:27017
  3. #1.5、管理登录认证
  4. db
  5. .auth("root", "xxxxxx")
  6. #2、切换到mydb
  7. s数据库(自定义创建的数据库)
  8. use mydb
  9. s
  10. 注:在创建用户之前,请用:db
  11. 命令,查看当前是在哪个数据库,因为添加新的用户只作用于当前数据库(这里就是作用于mydb
  12. s数据库)!!
  13. # 创建用户
  14. db
  15. .createUser({
  16.     user:"username",       // 用户名
  17.     pwd:"abc666",          // 密码
  18.     roles:[                // 角色
  19.         {
  20.             role:"db
  21. Owner", // 角色权限:db
  22. Owner是具有该数据库的全部权限
  23.             db
  24. :"mydb
  25. s"     // 要管理的数据库
  26.         },
  27.         {role:"db
  28. Owner",db
  29. :"mydb
  30. s2"}  // 如果要管理多个数据库,可以在添加多个
  31.     ]
  32. })
复制代码

  1. # 查看当前数据库中的所有用户
  2. show users
  3. 或:db
  4. .getUsers()
  5. 或:db
  6. .system.users.find().pretty()  // 格式化数据结构
  7. # 登录认证
  8. db
  9. .auth("admin", "123456")
  10. # 修改用户密码
  11. db
  12. .changeUserPassword("username","abc666")
  13. db
  14. .updateUser( "username", {
  15.     pwd: "abc666"
  16. })
  17. # 删除用户
  18. db
  19. .dropUser("username")  // username 是要删除的用户名
复制代码

  1. (1)、【数据库用户角色】针对每一个数据库进行控制。
  2. read:提供了读取所有非系统集合,以及系统集合中的system.indexes, system.js, system.namespaces
  3. readWrite:包含了所有read权限,以及修改所有非系统集合的和系统集合中的system.js的权限.
  4. (2)、【数据库管理角色】每一个数据库包含了下面的数据库管理角色。
  5. db
  6. Owner:该数据库的所有者,具有该数据库的全部权限。
  7. db
  8. Admin:一些数据库对象的管理操作,但是没有数据库的读写权限。(参考:http://docs.mongodb
  9. .org/manual/reference/built-in-roles/#db
  10. Admin)
  11. userAdmin:为当前用户创建、修改用户和角色。拥有userAdmin权限的用户可以将该数据库的任意权限赋予任意的用户。
  12. (3)、【集群管理权限】admin数据库包含了下面的角色,用户管理整个系统,而非单个数据库。这些权限包含了复制集和共享集群的管理函数。
  13. clusterAdmin:提供了最大的集群管理功能。相当于clusterManager, clusterMonitor, and hostManager和dropDatabase的权限组合。
  14. clusterManager:提供了集群和复制集管理和监控操作。拥有该权限的用户可以操作config和local数据库(即分片和复制功能)
  15. clusterMonitor:仅仅监控集群和复制集。
  16. hostManager:提供了监控和管理服务器的权限,包括shutdown节点,logrotate, repairDatabase等。
  17. 备份恢复权限:admin数据库中包含了备份恢复数据的角色。包括backup、restore等等。
  18. (4)、【所有数据库角色】
  19. admin:数据库提供了一个mongod实例中所有数据库的权限角色:
  20. readAnyDatabase:具有read每一个数据库权限。但是不包括应用到集群中的数据库。
  21. readWriteAnyDatabase:具有readWrite每一个数据库权限。但是不包括应用到集群中的数据库。
  22. userAdminAnyDatabase:具有userAdmin每一个数据库权限,但是不包括应用到集群中的数据库。
  23. db
  24. AdminAnyDatabase:提供了db
  25. Admin每一个数据库权限,但是不包括应用到集群中的数据库。
  26. (5)、【超级管理员权限】
  27. root: db
  28. admin到admin数据库、useradmin到admin数据库以及UserAdminAnyDatabase。但它不具有备份恢复、直接操作system.*集合的权限,但是拥有root权限的超级用户可以自己给自己赋予这些权限。
  29. (6)、【备份恢复角色】
  30. backup:数据库备份
  31. restore:数据库恢复
  32. (7)、【内部角色】
  33. __system
复制代码
2、修改MongoDB数据库配置:

MongoDB数据库的相关配置信息,是存储在mongodb
安装目次bin目次中的mongod.cfg文件中,
注:在修改mongod.cfg文件之前,请记得要先备份一份哦,以防万一!!

如上图所示,开启数据库访问权限验证:修改完成后,记得要保存哦!!
注:前面代有 # 的配置项,表示被解释(无效)状态的)
  1. # 开启数据库访问权限验证(注意:换行、缩进格式哦!!)
  2. security: 
  3.   authorization: enabled # disabled 关闭权限验证,enabled 开启权限验证
复制代码
3、重新启动MongoDB服务

注:只要修改了mongod.cfg文件,一定要重新启mongodb
服务后才会收效哦!!

打开服务步调:
此电脑(计算机) 右键 -> 管理 -> 服务和应用步伐 -> 服务 -> MongoDB Server (MongoDB) -> 右键 点击 重新启动(E)或 点击左侧的(重启动此服务)
或者 Win + R 运行 services.msc 也能打开如下 服务界面,找到 MongoDB Server (MongoDB) -> 右键 点击 重新启动(E)或 点击左侧的(重启动此服务)

4、用刚才创建好的超等管理账户连接数据库:

注:重新启动mongodb
服务后,用一个新的命令窗口来做操纵:通过如下图所示,在配置账户权限后,直接在命令窗口中用 mongo 命令,运行相关的操纵是没有响应的,只有在正确的输入账户和暗码后才举行相关操纵!!

连接本地MongoDB数据库:(不消指定 绑定IP 和 端标语)

连接运程MongoDB数据库:(必须指定 绑定IP 和 端标语)

5、给指定的数据库存配置账户:

这里以 myweb 数据库为例,给myweb配置一个账户,注:各个差别的数据库之间,可以创建有一个 或 多个账户,各数据库之间账户、暗码都是独立的,不能相互访问!
  1. # 给myweb数据库 创建一个名为:mupiao 的账户,角色为:db
  2. Owner
  3. db
  4. .createUser({
  5.     user:"mupiao",
  6.     pwd: "123456",
  7.     roles: [{
  8.         role: "db
  9. Owner",
  10.         db
  11. : "myweb"
  12.     }]
  13. })
复制代码

6、连接指定的MongoDB数据库

这里就用上面在 myweb数据库中创建的账户来演示 连接过程!
在命令窗口中连接:

在MongoDBCompass 可视化工具中连接:

八、MongoDB数据库常用命令:

上面就是MongoDB数据库的语法环境了,现在我们可以在命令窗口中执行一些MongoDB数据库的命令、语法啦!下面例出了一些常用的MongoDB数据库操纵命令!
1、查察所有数据库:

  1. show db
  2. s
复制代码
2、查察当前所在数据库:

  1. db
复制代码
3、查察当前所在数据库中所有集合:

  1. show collections// 查察user集合(用户表)中的所有记录db
  2. .user.find().pretty()// 加上.pretty() 让显示结果更友好明白!
复制代码
4、查察当前数据库相关信息(名称、文档个数、视图、索引、巨细等):

  1. db
  2. .stats()
复制代码
5、创建、打开、切换 数据库:

  1. use 数据库名字
  2. // 如:use mydb
复制代码
use 这个命令很特别:
use命令具有打开、 切换、 创建数据库的功能:
**注:**在MongoDB中创建一个新的数据库时,必要向数据库中创建一个集合(collections【就像关系数据库中的表】),而且插入一条数据,这个数据库才能创建乐成!!
如:往集合中插入一条数据。可以不消先创建集合,直接往里添加数据即可:
  1. db
  2. .user.insert({"name": "xiaoming"})     // user 就是集合(表)名或db
  3. .user.save({name:"沐枫", job:"Web前端"})  // 效果和上面一样,都是添加数据
复制代码
当命令执行后,数据库系统发现student是一个数据集合不存的,就自动创建一个集合,并随着数据的插入,数据库和集合也就真正的创建乐成了。
6、删除数据库(注:这里是删除当前所在的数据库)

注:这个命令一定要慎用,一旦该命令一执行一下当前所在数据库中的所有数据都玩完了!!!,除非您想删库跑路,哈哈!!
  1. db
  2. .dropDatabase()
复制代码
7、清屏(这是Dos的命令,当窗口中的内容太多时,可以使用该命令,清除屏幕内容,保持界面清楚):

  1. cls
复制代码
**8、**MongoDB 数据库备份与恢复,集合导入与导出:

MongoDB数据库的备份与恢复可直接在命令行工具中完成:
命令说明:

参数说明:

–authenticationDatabase  // 订定权限认证数据库,一般为 admin
–drop     // 清空集合原有数据 慎用!!
–file xxx.json   // 指定文件
注:除了用命令举行导入导出以外,还可以用MongoDB Compass(数据库图形管理工具)举行导入导出等操纵!!
使用 mongodump命令来备份 MongoDB 数据。该命令可以导出所有数据到指定目次中。mongodump 命令可以通过参数指定导出的数据量级转存的服务器。
  1. # 语法格式:mongodump -h 数据库IP地点 --port 端标语 -db
  2. 数据库名称 -u 用户名 -p 用户暗码 -o 数据库备份输出的路径# 例如,将名为mydb
  3. s的mongodb
  4. 数据库中所有的集合数据 备份到./当前目次(就是执行这条件命令的目次)中名为back的文件夹中mongodump -h localhost --port 27017 -u xxx -p xxx -db
  5. mydb
  6. s  -o ./back
复制代码
使用mongorestore命令来恢复备份的数据。
  1. # 语法格式(参数配置和上面一样):mongorestore -h 数据库IP地点 --port 端标语 -u 用户名 -p 用户暗码 -db
  2. 数据库名称 --authenticationDatabase admin --drop 要还原数据库存储路径【注:如在当前目次前面不消加"/"】# 实例代码:mongorestore -h 127.0.0.1 --port 27017 -u xxx -p xxx --db
  3. mydb
  4. s --authenticationDatabase admin --drop back/mongodump# --authenticationDatabase admin 当提示Authentication failed 权限不足,必要增长该参数# --drop 参数会清空原有的数据,请慎用!!!
复制代码
将JSON文件情势将数据导入到数据库 指定的集合中:
项目开发偶然间必要一些测试数据,如一条条的insert在繁琐了。所以,我们可以在代码编辑器中以json格式编辑好要插入的数据,以.json文件格式保存,然后导入到数据库中:
下面就是将mydata.json文件,导入到test数据库的student集合中。
  1. mongoimport -d mydb
  2.  -c user --drop --file D:\db
  3. \mydata.json
复制代码
以JSON文件情势将数据库 指定的集合导出:
  1. mongoexport -d mydb
  2.  -c user -o D:\db
  3. \mydata.json
复制代码
9、操纵帮助命令(列出MongoDB数据库所有的操纵方法)

  1. db
  2. .help()
复制代码
  1. DB methods:        db
  2. .adminCommand(nameOrDocument) - switches to 'admin' db
  3. , and runs command [just calls db
  4. .runCommand(...)]        db
  5. .aggregate([pipeline], {options}) - performs a collectionless aggregation on this database; returns a cursor        db
  6. .auth(username, password)        db
  7. .cloneDatabase(fromhost)        db
  8. .commandHelp(name) returns the help for the command        db
  9. .copyDatabase(fromdb
  10. , todb
  11. , fromhost)        db
  12. .createCollection(name, {size: ..., capped: ..., max: ...})        db
  13. .createView(name, viewOn, [{$operator: {...}}, ...], {viewOptions})        db
  14. .createUser(userDocument)        db
  15. .currentOp() displays currently executing operations in the db
  16.         db
  17. .dropDatabase()        db
  18. .eval() - deprecated        db
  19. .fsyncLock() flush data to disk and lock server for backups        db
  20. .fsyncUnlock() unlocks server following a db
  21. .fsyncLock()        db
  22. .getCollection(cname) same as db
  23. ['cname'] or db
  24. .cname        db
  25. .getCollectionInfos([filter]) - returns a list that contains the names and options of the db
  26. 's collections        db
  27. .getCollectionNames()        db
  28. .getLastError() - just returns the err msg string        db
  29. .getLastErrorObj() - return full status object        db
  30. .getLogComponents()        db
  31. .getMongo() get the server connection object        db
  32. .getMongo().setSlaveOk() allow queries on a replication slave server        db
  33. .getName()        db
  34. .getPrevError()        db
  35. .getProfilingLevel() - deprecated        db
  36. .getProfilingStatus() - returns if profiling is on and slow threshold        db
  37. .getReplicationInfo()        db
  38. .getSiblingDB(name) get the db
  39. at the same server as this one        db
  40. .getWriteConcern() - returns the write concern used for any operations on this db
  41. , inherited from server object if set        db
  42. .hostInfo() get details about the server's host        db
  43. .isMaster() check replica primary status        db
  44. .killOp(opid) kills the current operation in the db
  45.         db
  46. .listCommands() lists all the db
  47. commands        db
  48. .loadServerScripts() loads all the scripts in db
  49. .system.js        db
  50. .logout()        db
  51. .printCollectionStats()        db
  52. .printReplicationInfo()        db
  53. .printShardingStatus()        db
  54. .printSlaveReplicationInfo()        db
  55. .dropUser(username)        db
  56. .repairDatabase()        db
  57. .resetError()        db
  58. .runCommand(cmdObj) run a database command.  if cmdObj is a string, turns it into {cmdObj: 1}        db
  59. .serverStatus()        db
  60. .setLogLevel(level,<component>)        db
  61. .setProfilingLevel(level,slowms) 0=off 1=slow 2=all        db
  62. .setWriteConcern(<write concern doc>) - sets the write concern for writes to the db
  63.         db
  64. .unsetWriteConcern(<write concern doc>) - unsets the write concern for writes to the db
  65.         db
  66. .setVerboseShell(flag) display extra information in shell output        db
  67. .shutdownServer()        db
  68. .stats()        db
  69. .version() current version of the server
复制代码
九、启动 或 创建 指定的MongoDB数据库:

MongoDB数据库是以文档情势存储的,我们可以根自己的项目必要,在各自差别的项目中,指定MongoDB数据库目次(如在Vue 或 React 项目的根目次,和 package.json文件同级的目次中,创建一个名为database的文件夹)中去创建MongoDB数据库的存储目次!
1、使用 mongod 命令: 创建 或 启动 指定的MongoDB数据库!

mongod这个命令很特别,和use命令一样,假如指定的目次中有数据库就是启动,没有就是创建并启动!
  1. mongod --db
  2. path # 数据库目次 # 例如: mongod --db
  3. path D:\Vue\myapp\database
复制代码
2、假如mongodb
数据库路径太长,要输入好久,还可这样做


  1. 1、在dos命令行中先输入以下命令: mongod --db
  2. path  2、必要留意思的是,在--db
  3. path的背面加上一个空格 3、找到数据库所在的目次文件夹,直接将这个文件夹拖到命令窗口中去 4、此时,数据库的路径有自动有啦!!
复制代码

3、留意事项:

启动乐成后,一定不要关闭这个命令窗口,而且这个命令窗口中也不能再做其他操纵了,然后就可以在MongoDB图形化管理工具中看查数据库 或 在项目中链接使用MongoDB数据库啦。
固然在有些时间,假如想要用命令行操纵MongoDB数据库的话,就要再打开一个新Dos窗口!!!
输入mongo命令就进入了MongoDB数据库的语法环境了(一定要先启动MongoDB数据库后,在举行MongoDB数据库的操纵)。

十、MongoDB数据库-复制集

1、为什么要用复制集?

为了保证数据的安全,推荐使用复制集的方式来存储数据,一般复制集节点数至少要有3个,就相当于有3个MongoDB数据库,一主两从,这样一来,即便是当主节点宕机了,其他的从节点通过投票推举(所以,一般复制集节点数量不能是偶数,否则就会出现评局的状态),选出一个新的主节点出来继续工作,而且数据也不会丢失!!
固然假如非企业、公司的 或 数据不重要的,只是自己个人玩一下的话就用不着,主要看自己的需求。
2、在windows系统下搭建MongoDB复制集:

1、新建MongoDB复制集节点目次,如:在D盘下的MongoDB目次下,新建3个文件夹,分别定名为:db
1,db
2,db
3 用于存放复制集节点

2、分别在db
1,db
2,db
3这3个文件夹中新建一个文件定名为:mongod.conf 内容如下:

  1. # mongod.conf 文件systemLog:    destination: file    path: D:\MongoDB\db
  2. 1\mongod.log   # 设置日记文件存放路径    logAppend: true​storage:    db
  3. Path: D:\MongoDB\db
  4. 1   # 数据存储目次​net:    bindIp: 0.0.0.0     # 数据库地点:0.0.0.0 表示所有    port: 28017     # 数据库端标语​replication:    replSetName: rs0    # 复制集节点名称
复制代码
留意:
  1. * path 和 db
  2. Path 配置项中的路径一定要和当前所有的目次名对应!如:db
  3. 1,db
  4. 2,db
  5. 3* port 数据库端标语也不能重复!如:28017,28018,28019
复制代码
**比如:**db
2目次下的mongod.conf 内容如下
  1. # mongod.conf 文件systemLog:    destination: file    path: D:\MongoDB\db
  2. 2\mongod.log   # 设置日记文件存放路径    logAppend: true​storage:    db
  3. Path: D:\MongoDB\db
  4. 2   # 数据存储目次​net:    bindIp: 0.0.0.0     # 数据库地点:0.0.0.0 表示所有    port: 28018     # 数据库端标语​replication:    replSetName: rs0    # 复制集节点名称
复制代码
3、启动复制集节点

注:由于windows系统不支持fork,以所要分别用差别的命令窗口来启动,如这里有3个复制集节点,所有就要开3个命令窗口来打开,这样就会启动3个mongodb
历程,而且启动后不能关闭该命令窗口,否则历程也会随之结束!!
  1. # 命令窗口1mongod -f D:\MongoDB\db
  2. 1\mongod.conf​# 命令窗口2mongod -f D:\MongoDB\db
  3. 2\mongod.conf​# 命令窗口3mongod -f D:\MongoDB\db
  4. 3\mongod.conf
复制代码
通过以上命令启动好3个复制集节点后,可以在命令窗口中查察,mongodb
的历程环境
  1. ps mongo
复制代码
4、关联复制集节点

上面固然创建了3个复制集节点,但它们之间还没有任何关系,还是相互独立的,所以要将们关联起来,当有数据入后3个节点都会有数据,这样一来,即便是当主节点宕机了,其他的从节点通过投票推举(所以,一般复制集节点数量不能是偶数,否则就会出现评局的状态),选出一个新的主节点出来继续工作,而且数据也不会丢失!!
  1. hostname
  2. # MuGuiLin //这是我在windows系统中查看当前hostname 主机名
复制代码
注:假如各个复制集节点之间不是在同一台服务器上(固然推荐分开摆设,这里为了演示所以就在一台电脑上),就必要对应的服务器IP 或域名
2. 然后进入28017节点
  1. mongo localhost:28017
复制代码
  1. rs.initiate()
  2. # 执行以上命令后就进入复制集节点状态了
  3. rs0:SECONDARY> 回车          # 默认是从节点状态,按回车键可切换到主节点状态
  4. rs0:PRIMARY>                 # PRIMARY 表示进入主节点状态了
复制代码
  1. rs0:PRIMARY>rs.status()
  2. rs0:PRIMARY>rs.config()
  3. # 通过以上命令可以查看复制集节点的相关信息,其中"members":[...] 数组中就是各个节点的信息,由于还没有关联其他的节点,所以现在只有一个
复制代码
  1. rs0:PRIMARY>rs.add("MuGuiLin:28018")
  2. rs0:PRIMARY>rs.add("MuGuiLin:28019")
  3. # 执行以上命令后,再查看复制集节点,在"members":[] 数组中应该就有3个节点信息了
  4. rs0:PRIMARY>rs.status()
复制代码
到此复制集节点的关联工作就完成了!
5、查察从节点是否正常同步数据

1、先在28017主节点上插入一条数据
  1. # 进入28017节点mongo localhost:28017
  2. ​# 查察所以数据库rs0:PRIMARY>show db
  3. s
  4. ​# 向test数据库中的test集合插入一条数据rs0:PRIMARY>db
  5. .test.insert({name: "OK 666 MongoDB 数据库 复制集"})​# 查察当前数据库下的所有集合rs0:PRIMARY>show collections​# 查察test集合中的所有数据rs0:PRIMARY>db
  6. .test.find().pretty()
复制代码
writeConcern 数据写入配置:
**留意:**默认环境下插入数据时只要写入主节点(不管是否同步到从节点)就返回提示数据写入乐成。
**所以:**假如要保证在写入数据时,所的的节点 或 指定的节点都落盘(乐成写入)后,才返回提示数据写入乐成。
writeConcern 决定一个写操纵落到多少个节点上才算乐成。writeConcern 的取值包括:

  1. 例如:指定写入3个节点才算乐成rs0:SECONDARY>db
  2. .test.insert({name: "插入一条测试数据 -> 我要等3个复制集节点都插入乐成了,我才返回功能!"},{writeConcern:{w:3}})# writeConcern 参数说明:w: 节点数w: "majority"  # 大多数节点确认模式(一半以上: 共3有个节点,只要2个节点写入乐成即可)w: "all"  # 全部节点确认模式writeConcern中的另一个参数:j 可以决定写操纵到达多少个节点才算乐成,journal 则定义如何才算乐成。取值包括:j: true 表示写操纵落到 journal 文件中才算乐成!j: false 表示写操纵到达内存即算作乐成!
复制代码
writeConcern留意事项:

2、在从节点28018 或 28019中查察是否有数据同步过来
  1. # 进入28019节点mongo localhost:28019​# 开启从节点读的权限,默认环境下,从节点是不能读取的,所以要开启读的权限rs.slaveOk()rs0:SECONDARY> rs.slaveOk()​# 查察test集合中的所有数据rs0:SECONDARY>db
  2. .test.find().pretty()​# 执行以上查察命令后,假如能够正常显示在主节点28017上插入的数据,就表示数据已经同步过来啦!!!
复制代码
**注:**由于所有点节点都是在同一个电脑上或在同一个局域网内的,节点之间的数据同步速率是非常快的,一般在10ms内就能同步完成,假如是跨区域的、或是在差别的数据中央的,会受物理条件的影响,同频时间可能会延时长一点!!
十一、MongoDB数据库-模型操持

1、什么是数据模型?

数据模型是一组由符号、文本组成的集合,用以正确表达信息,到达有效交流、沟通的目的。
2、数据模型的三要素:

实体、属性、关系
底子的建模实际上就是将实体、属性、关系三者举行要机的联关起来,其表达方式有:1:1 (一对一),1 :N (一对多),M :N (多对多),然后再根据范式NF 一般选用第三范式(3NF)来举行建模;
而在MongoDB的文档中基本上都可以用内嵌方式、数据方式来完成这些关系的表述,就不消像传统的关系型数据库去做分表存储啦!**而且:**MongoDB也可以举行分集合(表)存储的哦!!!;
  1. // 可以用对象、数组来处理一对多 或 多对多的关系
  2. {
  3.     "username": "沐枫",
  4.     "sex": "男",
  5.     "job": "Web全栈",
  6.     "image": {
  7.         "live": "https:www.xxx.com/update/xxx.jpg",
  8.         "travel": "https:www.xxx.com/update/xxx.jpg",
  9.         "working": "https:www.xxx.com/update/xxx.jpg"
  10.     },
  11.     "addresses": [
  12.         {"type": "住址"},
  13.         {"type": "公司"},
  14.         {"type": "老家"}
  15.     ],
  16.     "hobbys": [
  17.         {"name": "打球"},
  18.         {"name": "看书"},
  19.         {"name": "上网"},
  20.         {"name": "旅游"}
  21.     ]
  22. }
复制代码
上面这种处理方式固然好用,但是 例如:当hobby子文档数据量很多时,数据就会很冗余,好的是MongoDB从3.2版开始也可以举行分集合(表),将hobby文档抽离成一个独立的集合user_hobby,然后举行关联查询!
  1. // users集合  把原来的users集合中的hobbys字段抽离到独立的user_hobby集合中
  2. {
  3.     "username": "沐枫",
  4.     "sex": "男",
  5.     "job": "Web全栈",
  6.     "image": {
  7.         "live": "https:www.xxx.com/update/xxx.jpg",
  8.         "travel": "https:www.xxx.com/update/xxx.jpg",
  9.         "working": "https:www.xxx.com/update/xxx.jpg"
  10.     },
  11.     "addresses": [
  12.         {"type": "住址"},
  13.         {"type": "公司"},
  14.         {"type": "老家"}
  15.     ],
  16.     "hobbys": [1, 2, 3, 4]
  17. }
  18. // 新抽离出来的user_hobby集合
  19. {
  20.     {hobby_id": 1, "name": "打球"},
  21.     {hobby_id": 2, "name": "看书"},
  22.     {hobby_id": 3, "name": "上网"},
  23.     {hobby_id": 4, "name": "旅游"}
  24. }
复制代码
通过引用方式 aggregate聚合框架中的 $lookup操纵符 来举行关联查询
例如:users集合 和 user_hobby集合 将这两个集合举行关联查询
  1. // users集合关联user_hobby集合db
  2. .users.aggregate([    {        $lookup:            {                from: "user_hobby",    //目标关联集合                localField: "hobbys",   //当前集合要关联的字段                foreignField: "hobby_id",  //目标集合要关联的字段                as: "new_hobby"  //查询后返回数据存放的字段名(这是动态生成的,在原来的users集合中是不存在的)            }    },    {        // ... 假如另有更多的集合必要关联查询,还可以继续关联查询下去。。。!    }])
复制代码
3、什么时间才应该使用引用方式(拆分集合(表)):


4、MongoDB 引用是有限制的:


数据模型的三层深度:
概念模型,逻辑模型,物理模型
**传统数据库模型操持:**从概念到逻辑到物理,它们之间其实就是从概念模型 到 物理模型 的一个渐渐细化的过程!
项目概念模型 CDM逻辑模型 LDM物理模型 PDM目的形貌业务系统要管理的对 象基于概念模型,具体列出 所有实体、实体的属性及 关系根据逻辑模型,联合数据库 的物理布局,操持具体的表 布局,字段列表及主外键特点用概念名词来形貌实际中 的实体及业务规则,如 “接洽人”基于业务的形貌 和数据库无关技术实现细节 和具体的数据库类型相关主要使用者用户 需求分析师需求分析师 架构师及开发者开发者 DBA 5、MongoDB 文档模型操持的三个误区 :

所以严格来讲,MongoDB 同样必要概念/逻辑建模的,文档模型操持的物理层布局可以和逻辑层类似,可以省略物理建模的具体过程。
关系模型 VS 文档模型:
项目关系数据库JSON 文档模型模型操持层次概念模型 逻辑模型 物理模型概念模型 逻辑模型模型实体表集合模型属性列字段模型关系关联关系,主外键内嵌数组,引用字段 十二、MongoDB数据的操纵:(和关系型数据库一样,就是增、删、查、改)

1、插入数据:insert()、insertOne()、insertMany()

语法:
db
.<集合>.insertOne(<JSON对象>)

db
.<集合>.insertMany([<JSON 1>,<JSON 2>,<JSON 3>,…])

注:插入数据时不必要专门去创建集合(表),由于插入数据时会自动创建集合!!

  1. db
  2. .student.insert({"name": "muguilin", "age": 28, "sex": "男", job: "Web前端"});// 插入1条数据db
  3. .student.insertOne({"name": "muguilin", "age": 28, "sex": "男", job: "Web前端"});// 插入多条数据db
  4. .student.insertMany([    {"name": "zhangsan", "age": 32, "sex": "男", job: "JAVA"},    {"name": "lisi", "age": 28, "sex": "女", job: "PHP"},    {"name": "wanger", "age": 16, "sex": "男", job: "Web前端"},]);
复制代码
2、查找数据:find()、findOne()

语法:
db
.<集合>.find(<查询条件>)

find()还支持适用 field.sub_field 的情势查询子文档

  1. db
  2. .student.find()//相当于下面关系数据库中的语法:select * from student// 在查询返回的结果背面加上.prettys()方法可以让显示效果更友好!db
  3. .student.find().pretty()// 查询第一条数据db
  4. .student.findOne()相当于:selecttop 1 * from student;或者是:db
  5. .student.find().limit(1);
复制代码

  1. db
  2. .student.find({sex: "女"}, {_id: 0, name: 1, age: 1})// 相当于:select name, age from student where sex = '女';或者:1 === true, 0 === falsedb
  3. .student.find({sex: "女"}, {_id: false, name: true, age: true})
复制代码

  1. db
  2. .student.find({"score.shuxue": 60 });// 子文档查询db
  3. .student.find({"score": {"shuxue": 60 }});// 多个子文档查询 $elemMatch 表示必须是同一个子对象满意多个条件db
  4. .student.find({"score": {$elemMatch: {"yuwen": 80, "shuxue": 60, "yinyu": 70 });
复制代码
条件查询:

  1. db
  2. .student.find({"uid":"u10010"});或:db
  3. .student.find({"name":"沐枫"});// 相当于: select * from student where name = "沐枫";
复制代码

  1. // 大于查询db
  2. .student.find({"score": {$gt: 60}})//相当于:select * from student where score > 60;// 小于查询db
  3. .student.find({"score": {$lt: 60}})// 相当于:select * from student where score < 60;// 大于等于查询db
  4. .student.find({"score": {$gte: 80}})// 相当于:select * from student where score >= 80;// 小于等于查询db
  5. .student.find({"score": {$lte: 80}})// 相当于:select * from student where score <= 80;// 正则表达式查询(查找名字中以 “沐” 开头的记录)db
  6. .student.find({"name": /^沐/g})// 相当于:select * from student where name like '沐%';// 正则表达式查询(查找名字中包罗 “沐” 的记录)db
  7. .student.find({"name": /沐/g})// 相当于:select * from student where name like '%沐%';
复制代码

SQL(MySql、SqlServer)MQL(MongoDB)a = 1等于a <> 1不等于a > 1大于a >= 1大于等于a < 1小于a <= 1小于等于 逻辑查询:

  1. // 查询 age >= 18 而且 age <= 26 db
  2. .student.find({age: {$gte: 18, $lte: 26}});
复制代码

  1. db
  2. .student.find({"score": 80, "age": 18})// 相当于:select * from student where score = 80 and age = 18;// 另一种$and情势db
  3. .student.find({$and:[{"score":60 , "age":12}, {"score":80 , "age":15}]})
复制代码

  1. db
  2. .student.find({$or: [{"age": 18}, {"age": 25}]})// 相当于:select * from student where age = 18 or age = 25;
复制代码

SQL(MySql、SqlServer)MQL(MongoDB)a = 1 AND b = 1而且a =1 OR b = 1或a IS NULL不存在a IN (1,2,3)存在 聚合查询:
MongoDB聚合框架(Aggregation Framework)是一个计算框架,它可以:
对效果而言,聚合查询相录于传统SQL查询中的,ORDER BY,GROUP BY,LIMIT,LEFT OUTER JOIN,AS等!

步调作用SQL等价运算符$match过滤WhERE$project投影AS$sort排序ORDER BY$group分组GROUP BY$skip结果限制SKIP$limit结果限制LIMIT$lookup左外连接(多表操纵)LEFT OUTER JOIN$graphLookup图搜刮N/A$facet分面搜刮N/A$bucket分面搜刮N/A$unwind睁开数组N/A
  1. // 升序db
  2. .student.find().sort({"age": 1});// 降序db
  3. .student.find().sort({"age": -1});
复制代码

  1. db
  2. .student.find().limit(10);// 相当于:selecttop 10 * from student;
复制代码

  1. db
  2. .student.find().skip(10);// 相当于:select * from student where id not in (selecttop 10 * from student);
复制代码

  1. db
  2. .student.find().limit(20).skip(10);/** 列表分页* limit:就是 pageSize* skip :就是第几页 * pageSize*/
复制代码

  1. db
  2. .student.find({age: {$gte: 18}}).count();// 相当于:select count(*) from student where age >= 18;// 假如要返回限制之后的记录数量,要使用 count(true)或者 count(非 0)db
  3. .student.find().limit(20).skip(10).count(true);
复制代码

  1. db
  2. .student.aggregate([{$unwind: '$score'}])
复制代码

  1. db
  2. .student.aggregate([    {$match: "sex": "女"},    // 只取性别为女性的    {$skip: 100},    // 跳过100条    {$limit: 30},    // 只取30条        // 只返回姓名 和 年龄这两个字段    {$project: {        '姓名': 'name',        '年龄': 'age'    }}])
复制代码
explain查询:
explain 是非常有效的工具,会帮助你得到查询方面诸多有效的信息。只要对游标调用 该方法,就可以得到查询细节。explain 会返回一个文档,而不是游标自己。
  1. // 查询时加上explain() 方法会返回查询使用的索引环境,耗时和扫描文档数的统计信息db
  2. .student.find({name:"沐枫"}).explain()// 在explain() 方法中加上"executionStats"参数 可看查 查询具体的执行时间db
  3. .student.find({name:"沐枫"}).explain("executionStats")
复制代码
3、修改数据:update()

语法:
db
.<集合>.update(<查询条件>,<更新字段>)

db
.<集合>.updateOne(<查询条件>,<更新字段>) 表示无论条件匹配多少记录,始终只更新第1条记录

db
.<集合>.updateMany([<查询条件>,<更新字段>]) 表示 条件匹配多少条 就 更新多少条

**注:在修改(更新)时,**假如要更新的字段名存在 则更新数据,假如不存在 则创建并写入数据!!
注:update(),updateOne(),updateMany() 方法要求更新条件部分必须具有以下参数之一,否则就报错!!
10 条数据
  1. db
  2. .student.find().limit(10);// 相当于:selecttop 10 * from student;
复制代码

  1. db
  2. .student.find().skip(10);// 相当于:select * from student where id not in (selecttop 10 * from student);
复制代码

  1. db
  2. .student.find().limit(20).skip(10);/** 列表分页* limit:就是 pageSize* skip :就是第几页 * pageSize*/
复制代码

  1. db
  2. .student.find({age: {$gte: 18}}).count();// 相当于:select count(*) from student where age >= 18;// 假如要返回限制之后的记录数量,要使用 count(true)或者 count(非 0)db
  3. .student.find().limit(20).skip(10).count(true);
复制代码

  1. db
  2. .student.aggregate([{$unwind: '$score'}])
复制代码

  1. db
  2. .student.aggregate([    {$match: "sex": "女"},    // 只取性别为女性的    {$skip: 100},    // 跳过100条    {$limit: 30},    // 只取30条        // 只返回姓名 和 年龄这两个字段    {$project: {        '姓名': 'name',        '年龄': 'age'    }}])
复制代码
explain查询:
explain 是非常有效的工具,会帮助你得到查询方面诸多有效的信息。只要对游标调用 该方法,就可以得到查询细节。explain 会返回一个文档,而不是游标自己。
  1. // 查询时加上explain() 方法会返回查询使用的索引环境,耗时和扫描文档数的统计信息db
  2. .student.find({name:"沐枫"}).explain()// 在explain() 方法中加上"executionStats"参数 可看查 查询具体的执行时间db
  3. .student.find({name:"沐枫"}).explain("executionStats")
复制代码
3、修改数据:update()

语法:
db
.<集合>.update(<查询条件>,<更新字段>)

db
.<集合>.updateOne(<查询条件>,<更新字段>) 表示无论条件匹配多少记录,始终只更新第1条记录

db
.<集合>.updateMany([<查询条件>,<更新字段>]) 表示 条件匹配多少条 就 更新多少条

**注:在修改(更新)时,**假如要更新的字段名存在 则更新数据,假如不存在 则创建并写入数据!!
注:update(),updateOne(),updateMany() 方法要求更新条件部分必须具有以下参数之一,否则就报错!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4