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:

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

规则

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

原有库

admin: 存放有数据库帐号相关信息,在身份验证和授权时使用
local: 特定于单个服务器的数据会存储在此数据库中。在副本集中,local 数据库用于存储复制过程中所使用的数据,而其本身不会被复制。
config: 用于分片集群环境,存放了分片相关的元数据信息

类型

最新类型文档
目前多了number的int32, long,Decimal128,类型检查

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: 下添加下面代码

security:authorization: enabled
  1. 重启服务
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)直接进去,然后再进行认证。

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

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

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

ps 权限说明

(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:主从分片

主从

分片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/2374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql中的行格式之compact格式分析

mysql中的行格式之compact格式分析 mysql行格式 所谓行格式,就是指mysql一行数据的存储格式。 InnoDB 储存引擎支持有四种行储存格式:Compact、Redundant、Dynamic 和 Compressed。 Redundant是很古老的行格式了,因为占用空间最多&#x…

基于深度学习的高精度道路瑕疵检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度道路瑕疵(裂纹(Crack)、检查井(Manhole)、网(Net)、裂纹块(Patch-Crack)、网块(Patch-Net)、坑洼块&#x…

LAMP环境搭建

LAMP 学习目标 配置基于 php5_module 模块的 LAMP 环境配置基于 php-fpm 和 proxy_fcgi_module 模块的 LAMP 环境安装 SCL 仓库中的 PHP 7.0安装配置 LAMP 应用配置 AWStats 实现虚拟主机访问日志分析统计 任务1:安装配置 LAMP 环境(1) 要求 基于 CentOS7 官方仓库…

【C++】模板进阶—非类型模板参数、模板特化及模板的分离编译

🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛸C 🛹Linux 📕 学习格言:博观而约取&#xff0…

什么是云应用程序?

应用程序优先的云服务的日益普及导致应用程序与云服务的融合程度比以前更深。应用程序和云之间的运行时边界正在从虚拟机转移到容器和函数。集成边界正在从仅访问数据库和消息代理转向应用程序的机械部分混合并在云中运行的边界。在这个最终架构中,应用程序是“云绑…

pwm呼吸灯

文章目录 一、呼吸灯二、代码实现三、引脚分配 一、呼吸灯 呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,使用开发板上的四个led灯实现1s间隔的呼吸灯。 二、代码实现 c module pwm_led( input clk ,input rst_n ,output reg [3:0] led ); …

LLM资料

大语言模型(LLM)课程、论文与资料推荐 现在CV和NLP越来越紧密,AIGC、多模态、大模型越来越火,尤其是在LLM(代表成果ChatGPT)的席卷之下。所以Amusi建议:CVer的技能树中要把NLP或者说LLM(至少主流的工作要follow)加上。…

photoshop制作法线和凹凸贴图

做个选区 Ctrlj 法线贴图 生成凹凸贴图

Spring框架的创建和使用

目录 Spring框架概述 什么是Spring框架 什么是容器 什么是IoC容器 Spring的核心功能 IoC容器和普通程序开发的区别 DI Spring项目的创建和使用 Spring项目创建 创建一个maven项目 添加Spring框架支持 添加一个启动类 Spring项目的使用 存储Bean对象 获取并使用B…

应用级监控方案Spring Boot Admin

1.简介 Spring Boot Admin为项目常用的监控方式,可以动态的监控服务是否运行和运行的参数,如类的调用情况、流量等。其中分为server与client: server: 提供展示UI与监控服务。client:加入server,被监控的…

dataframe基础操作

目录 用法:DataFrame.drop(labelsNone,axis0, indexNone, columnsNone, inplaceFalse) 参数说明: labels 就是要删除的行列的名字,用列表给定 axis 默认为0,指删除行,因此删除columns时要指定axis1; index…

【Git 快速了解】

Git简单了解 一、控制系统 分布式版本控制系统 git 集中式版本控制系统 svn cvs二、安装Git sudo apt install git sudo apt search git 三、配置git环境 参数:–globle :长命令表示配置整个git环境 git config --global user.name “你的用户名” git config -…

torch中 contiguous(), .view(), .reshape(), .permute(), .transpose()的区别与联系

文章目录 1、张量的数据存储2、张量的连续性:contiguous3、.view() 和 .reshape()4、.permute() 和 .transpose()5、总结 1、张量的数据存储 在pytorch中,张量的存储实际上分为两个部分,一部分是张量的头信息,包括张量的shape&am…

随手笔记——Ceres 求解曲线拟合问题

这里写目录标题 说明步骤源代码 说明 Google Ceres 是一个广泛使用的最小二乘问题求解库。在 Ceres 中,只需按照一定步骤定义待解的优化问题,然后交给求解器计算即可。 步骤 定义每个参数块。 参数块通常为平凡的向量,但是在 SLAM 里也可以…

vue3,elementPlus和自己封装,点击 新增添加表单,删除表单,提交数据

ElementPlus下的form也有新增表单 如果你写H5等没找到合适的 自己也可以进行封装 实现3个代码讲解:1:ElementPlus的代码 2:自己书写的代码 3:自己把2的代码进行封装 1:ElementPlus的运行效果 点击提交 1:ElementPlus…

BrowserRouter刷新404解决方案

1、本地开发环境 在js脚本命令里加上 --history-api-fallback "scripts": {"serve": "webpack serve --config webpack.dev.js --history-api-fallback" }2、生产环境,可以修改 nglnx 配置: server {listen XXXX; //端口号…

Python教程(3)——python开发工具vscode的下载与安装

Python的开发工具有很多款,很多都是非常好用的,其中vscode作为其中一款Python的开发工具,是非常轻量级的,今天我们来介绍一下vs code的下载与安装。 vscode的下载与安装 首先需要到vscode的官网,这个谷歌或者百度一下…

Windows上传ios dsym到Bugly

首先下载符号表工具腾讯 Bugly SDK下载 (qq.com) dsym 可以在 wIndow-Organizer-找到版本 右键show In Finder buglyqq-upload-symbol.jar 在上面得文件同级目录下 进入cmd 输入一下命令 需要修改成你自己得信息 java -jar buglyqq-upload-symbol.jar -appid d83b04b3c3 -ap…

hadoop分布式系统复习题 选择题

1、以下哪一项不属于 Hadoop 可以运行的模式? 互联模式 2、下面哪个程序负责 HDFS 数据存储? Datanode 3、HDFS 中的 block 默认保存__3 _份。 4、配置Hadoop时,JAVA_HOME包含在哪一个配置文件中 hadoop-env.sh 。 5、 Hadoop fs中的-get和-p…

VSCode 注释后光标快速定位下一行

VSCode默认用 Ctrl / 注释一行时,光标停留在该行中。下面介绍如何注释后,光标会自动移动到下一行。 1.【View】 ->【Extensions】->【查找并安装Multi-command 扩展】 2.【File 】 -> 【Preferences 】->【Keyboard Shortcuts】&#xff08…