MongoDB操作基本教程

MongoDB

版本(重要)

v6.0.7

可执行文件说明

bin目录下默认可执行文件说明

  • mongod 实例,这样不仅减少资源竞争,而且服务器故障也不会同时影响到多个服务。
  • mongos 在分片集群中扮演路由的角色,提供客户端和分片之间的接口。
  • mongosh 是 MongoDB 集成的交互式 shell 工具。

数据库工具

需要另外下载:https://www.mongodb.com/try/download/shell

图形界面工具:https://www.mongodb.com/try/download/compass

MongoDB 数据库工具是用于处理 MongoDB 部署的命令行实用程序的集合。数据库工具包括以下二进制文件:

二进制导入导出

mongodump: 导出 mongod 数据库的二进制数据

mongorestore: 恢复 mongodump 导出文件的数据到 mongod 或 mongos 数据库

bsondump: 转换 BSON 导出文件成 JSON 格式

数据导入导出

mongoimport: 从外部 JSON、CSV 或 TSV 文件中加载数据

mongoexport: 从 mongod 实例中导出数据到 JSON 或 CSV 文件中

诊断工具

mongostat: 快速诊断当前运行的 mongod 或 mongos 实例的状态

mongotop: 统计 mongod 实例读取和写入数据的时间

GridFS 工具

mongofiles: 支持在 GridFS 对象中操作 MongoDB 实例中存储的文件

ps:

bash 复制代码
在 MongoDB 中,核心进程主要包含了 mongod、mongos 和 mongosh 三个。

其中最主要的是 mongod 程序,其在不同的部署方案中(单机部署、副本集部署、分片集群部署),通过不同的配置,可以扮演多种不同的角色:

在单机部署中作为数据库服务器(提供所有读写功能)
在副本集部署中,通过配置,可以部署为 Primary 节点(负责写数据,也可以提供查询)、Secondary 节点(从主节点复制数据,也可以提供查询)、以及 Arbiter 节点(不保存数据,主要用于参与选举投票)
在分片集群中,除了在每个分片中扮演上述角色外,还扮演着配置服务器的角色(存储有分片集群的所有元数据信息,mongos 的数据路由分发等都要依赖于它)
在一台服务器上,可以启动多个 mongod 服务。但在实际生产部署中,通常是建议一台服务器部署一个

规则

  • 文档中的键/值对是有序的。
  • 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
  • MongoDB区分类型和大小写。
  • MongoDB的文档不能有重复的键。
  • 文档的键是字符串。

原有库

admin: 存放有数据库帐号相关信息,在身份验证和授权时使用

local: 特定于单个服务器的数据会存储在此数据库中。在副本集中,local 数据库用于存储复制过程中所使用的数据,而其本身不会被复制。

config: 用于分片集群环境,存放了分片相关的元数据信息

类型

最新类型文档

目前多了number的int32, long,Decimal128,类型检查

bash 复制代码
String	字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer	整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean	布尔值。用于存储布尔值(真/假)。
Double	双精度浮点值。用于存储浮点值。
Min/Max keys	将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Array	用于将数组或列表或多个值存储为一个键。
Timestamp	时间戳。记录文档修改或添加的具体时间。
Object	用于内嵌文档。
Null	用于创建空值。
Symbol	符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date	日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID	对象 ID。用于创建文档的 ID。
Binary Data	二进制数据。用于存储二进制数据。
Code	代码类型。用于在文档中存储 JavaScript 代码。
Regular expression	正则表达式类型。用于存储正则表达式。

ObjectId组成:时间戳(4)+机器码(3)+PID(3)+计数器(3)

从ObjectId可得到数据戳,所以不需要记录创建时间

var id = ObjectId()

id.getTimestamp() // 2023-07-13T06:02:28.000Z

id.toString() // 64af93742f23b81ba99ae1e4

日期

var myDate = new Date()

myDate.toString()

Date()

命令操作

连接数据库

以前是使用mongo命令连接,现在使用mongosh连接

默认没有启用访问控制,所以默认是没有用户名的

一般连接

mongosh 直接连接即可

关闭免密登录

  1. 启用认证

找到mongo的安装目录x:\MongoDB\Server\version\bin下的 mongod.cfg 文件,在 #security: 下添加下面代码

bash 复制代码
security:
 authorization: enabled
  1. 重启服务
bash 复制代码
net stop mongodb
net start mongodb
  1. 创建用户

db.createUser({user:"admin",pwd:"123456",roles:["root"]})

  1. 使用用户名连接
  • (1)使用用户名密码连接

mongosh文档

mongosh连接带认证方式

mongosh --port 27017 --authenticationDatabase "admin" -p // 回车输入密码

  • (2)直接进去,然后再进行认证。

直接连接是可以进去的,但是无法对数据库里面的表进行操作,只能看到有表

进入后进行认证,然后就可以操作了

bash 复制代码
use admin
db.auth("admin", "123456")
  1. 其他命令
bash 复制代码
db.dropUser('admin')  # 删除用户 
db.updateUser('admin', {pwd: '654321'})  # 修改用户密码  
db.createUser({user:"你自定义的用户名",pwd:"你自定义的密码",roles:[{role:"readWrite",db:"test"}]}) # 对具体数据库设置用户权限 

ps 权限说明

bash 复制代码
(1)数据库用户角色:read(只读)、readWrite(可读写);
(2)数据库管理角色:dbAdmin(在当前db中执行管理操作的权限)、dbOwner(在当前db中执行任意操作)、userAdmin(在当前db中管理user的权限);
(3)集群管理角色:clusterAdmin(管理机器的最高权限)、clusterManager(管理和监控集群的权限)、clusterMonitor(监控集群的权限)、hostManager( 管理Server);
(4)备份恢复角色:backup、restore;
(5)所有数据库角色:readAnyDatabase(在所有数据库上都有读取数据的权限)、readWriteAnyDatabase(在所有数据库上都有读写数据的权限)、userAdminAnyDatabase(在所有数据库上都有管理user的权限)、dbAdminAnyDatabase(管理所有数据库的权限);
(6)超级用户角色:root(超级用户)

查看数据库版本

外部

mongod --version

内部

db.version()

创建库

use airec // 创建

db // 查看当前数据库

ps:此时看不到数据库,需要插入集合和数据才行

crud[curd]

以前的方法和目前的方法对比一览表

删除

use airec // 切换数据库

db.dropDatabase() // 删除

show dbs // 查看是否成功

创建集合(有可选参数)

use airec

db.createCollection('behavior')

db.createCollection("item")

db.createCollection("user")

db.createCollection("test")

删除集合

use airec

db.dropCollection("test")

show collections // 查看集合

show tables // 查看集合

插入文档

db.behavior.insert({title:"test"})

查找文档

db.behavior.find()

db.behavior.find().pretty()

查找 and

db.behavior.find({key: value})

查找 or

db.behavior.find($or:[{key: value}, {key2, value2}])

查找 条件

db.behavior.find({age: {gt: 3}}) // 其他类似 gt gte lt $lte

更新文档

db.behavior.updateOne({where}, {KaTeX parse error: Expected 'EOF', got '}' at position 12: set: {data}}̲) db.behavior.u...set: {data}})

删除文档

db.col.remove({条件},justOne:false) // 默认删除所有
db.behavior.remove({name:"hjj"}) // 删除所有name为"hjj"的文档

db.behavior.remove({name:"hjj", 1}) // justOne 只删除一条匹配到的文档

remove 过期,使用以下代替

db.behavior.deleteOne()

db.behavior.deleteMany()

查找时根据字段类型过滤-$type

用于返回需要的字段的类型筛选

可字符串,可数字代表级别

类型表

db.behavior.find({age: {KaTeX parse error: Expected 'EOF', got '}' at position 8: type: 2}̲}) // 查找字符串的age...type: string}}) // 查找字符串的age

聚合函数

直接看文档

备份和恢复

mongodump文档

说明,已经不使用-o dict来输出,而是使用--archive=dict

更新换代快,还是得看直接看文档,被坑了半天。。。

归档备份

mongodump -u admin -p="" --authenticationDatabase=admin --archive=D:/bk/mongodump-airec-db --db=airec

恢复备份

mongorestore mongodump -u admin -p="" --authenticationDatabase=admin --archive=D:/bk/mongodump-airec-db --db=airec

TODO:主从分片

主从

分片

相关推荐
cookqq20 分钟前
mongodb源码分析session异步接受asyncSourceMessage()客户端流变Message对象
数据库·sql·mongodb·nosql
呼拉拉呼拉31 分钟前
Redis故障转移
数据库·redis·缓存·高可用架构
什么都想学的阿超34 分钟前
【Redis系列 04】Redis高可用架构实战:主从复制与哨兵模式从零到生产
数据库·redis·架构
pp-周子晗(努力赶上课程进度版)1 小时前
【MySQL】视图、用户管理、MySQL使用C\C++连接
数据库·mysql
斯特凡今天也很帅1 小时前
clickhouse常用语句汇总——持续更新中
数据库·sql·clickhouse
超级小忍2 小时前
如何配置 MySQL 允许远程连接
数据库·mysql·adb
吹牛不交税3 小时前
sqlsugar WhereIF条件的大于等于和等于查出来的坑
数据库·mysql
hshpy3 小时前
setting up Activiti BPMN Workflow Engine with Spring Boot
数据库·spring boot·后端
月初,3 小时前
MongoDB学习和应用(高效的非关系型数据库)
学习·mongodb·nosql
文牧之4 小时前
Oracle 审计参数:AUDIT_TRAIL 和 AUDIT_SYS_OPERATIONS
运维·数据库·oracle