MongoDB - 入门指南
组件结构
核心进程
在 MongoDB 中,核心进程主要包含了 mongod、mongos 和 mongosh 三个。
其中最主要的是 mongod 程序,其在不同的部署方案中(单机部署、副本集部署、分片集群部署),通过不同的配置,可以扮演多种不同的角色:
- 在单机部署中作为数据库服务器(提供所有读写功能)
- 在副本集部署中,通过配置,可以部署为 Primary 节点(负责写数据,也可以提供查询)、Secondary 节点(从主节点复制数据,也可以提供查询)、以及 Arbiter 节点(不保存数据,主要用于参与选举投票)
- 在分片集群中,除了在每个分片中扮演上述角色外,还扮演着配置服务器的角色(存储有分片集群的所有元数据信息,mongos 的数据路由分发等都要依赖于它)
在一台服务器上,可以启动多个 mongod 服务。但在实际生产部署中,通常是建议一台服务器部署一个 mongod 实例,这样不仅减少资源竞争,而且服务器故障也不会同时影响到多个服务。
mongos 在分片集群中扮演路由的角色,提供客户端和分片之间的接口。
mongosh 是 MongoDB 集成的交互式 shell 工具。
数据库工具
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 实例中存储的文件
数据逻辑结构
MongoDB 数据逻辑结构分为数据库 database、集合 collection、文档 document 三层 :
- 一个 mongod 实例中允许创建多个数据库
- 一个数据库中允许创建多个集合,集合相当于关系型数据库的表
- 一个集合则是由若干个文档构成,文档相当于关系型数据库的行,是 MongoDB 中数据的基本单元
数据库
一个数据库中可以创建多个集合,原则上应把逻辑相近的集合都放在一个数据库中。
在 MongoDB 中,会有以下几个内建的数据库:
- admin: 存放有数据库帐号相关信息,在身份验证和授权时使用
- local: 特定于单个服务器的数据会存储在此数据库中。在副本集中,local 数据库用于存储复制过程中所使用的数据,而其本身不会被复制。
- config: 用于分片集群环境,存放了分片相关的元数据信息
- test: 默认创建的测试库,连接 mongod 服务时,如果不指定连接的具体数据库,默认就会连接到 test 数据库
集合
和 SQL 的表不同,集合是动态模式,不需要在读写数据前创建模式就可以使用,集合中的文档也可以拥有不同的字段,随时可以任意增减某个文档的字段。
默认情况下,集合不要求其文档具有相同的模式,但这是一种很好的实践。可以通过使用 MongoDB 的文档验证功能和可用于多种编程语言的对象–文档映射(object-document mapping)库来实现文档验证。
集合由其名称进行标识,集合名称可以是任意 UTF-8 字符串,但有以下限制:
- 不能是空字符串(
"")。 - 不能含有
\0(空字符),这个字符用于表示集合名称的结束 - 不能以
system.开头,该前缀为内部集合保留
集合名称使用 . 字符可以创建子集合,用与区分不同组织集合。虽然子集合没有任何特殊属性,但它们很有用,许多 MongoDB 工具整合了子集合。
文档
文档是 MongoDB 中数据的基本存储单元,以一种叫作 BSON 的文档结构表示。
文档中的键值对是有序的,不同序则是不同文档。并且键是区分大小写的,否则也为不同文档。
文档的键是字符串,而值除了字符串,还可以是 Int、Long、Double、Boolean、数组、嵌入文档等多种类型。
每个文档都有一个默认的 _id 键,它相当于关系型数据库中的主键,这个键的值在同一个集合中必须是唯一的。
_id 键的值默认是 ObjectId 类型,在插入文档的时候,如果用户不设置文档的 _id 值的话,MongoDB 会自动生成一个唯一的 ObjectId 值进行填充。
数据库文件
MongoDB 在 3.2 版本已经将 WiredTiger 作为默认的存储引擎。其作为存储引擎的时候,数据库会有以下存储文件:
collection-*.wt: 存储集合的数据index-*.wt: 存储索引的数据WiredTiger: 存储基本配置信息WiredTiger.wt: 存储所有其他集合的元数据信息WiredTiger.lock: 存储进程 ID,用于防止多个进程连接同一个 WiredTiger 数据库WiredTiger.turtle: 存储WiredTiger.wt的元数据信息journal: 存储数据库的写日志
命令行工具
MongoDB 提供的 mongosh 是一个 JavaScript 的 shell,其提供了许多高级功能和自定义功能。
使用技巧
对于 MongoDB 提供的功能,shell 内置了帮助文档,可以输入 help 命令进行访问,使用 db.help() 可以查看数据库级别的帮助文档,使用 db.foo.help() 可以查看集合级别的帮助文档。
在 shell 中使用函数之前,在不使用括号的情况下输入函数名,这样会打印出函数的源代码,这是一个可以查看函数具体行为的好方法。
执行脚本
shell 不止可以直接执行 JavaScript 的脚本代码,还可以用于执行 JavaScript 的脚本文件,简单执行 mongo script.js 即可。
如果已经进入到 shell 中,可以使用 load() 函数加载 JavaScript 脚本文件。
创建 .mongorc.js 文件
对于需要频繁被加载的脚本,可以将它们添加到 .mongorc.js 中,此文件会在启动 shell 时自动运行。
在更实际一些的场景中,使用此脚本可以设置全局变量,或者为长名称设置一个简短的别名,也可以重写内置函数。
定制提示信息
通过将 prompt 变量设置为一个字符串或函数,可以重写默认的 shell 提示,如下示例:
prompt = function() {
if (typeof db == 'undefined') {
return '(nodb)> ';
}
// 检查最后的数据库操作
try {
db.runCommand({getLastError: 1});
} catch (e) {
print(e);
}
return db+"> ";
};
提示函数应该返回一个字符串,通常应该包含对 getLastError 的调用,这样可以捕获输入时的错误,并在 shell 断开连接时自动重新连接。
编辑复杂变量
使用 shell 时,编辑多行的时候不能再编辑前面的行,这对于较大的代码块或对象非常不友好。
为此,可以在 shell 中设置 EDITOR 变量,则可以使用 edit varname 的方式编辑一个变量,完成更改后只需保存并退出编辑器,变量将被重新解析并加载回 shell 中。
不便使用的集合名称
大多数情况下可以使用 db.collectionName 语法来获得一个集合的内容,但如果集合名称是保留字或是无效的 JavaScript 属性名称时,那么此方法就不能正常工作了。
对于上述的情况,可以使用 db.getCollection() 的方式绕过无效属性。
MongoDB - 入门指南的更多相关文章
- mongoDB 入门指南、示例
一.准备工作 1. 下载mongoDB 下载地址:http://www.mongodb.org/downloads 选择合适你的版本 相关文档:http://www.mongodb.org/displ ...
- MongoDB快速入门指南与docker-compose快体验
MongoDB快速入门指南与docker-compose快体验 MongoDB相对于RDBMS的优势 模式少 -MongoDB是一个文档数据库,其中一个集合包含不同的文档.一个文档之间的字段数,内容和 ...
- Nodejs学习笔记(十)--- 与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门
目录 简介 MongoDB安装(windows) MongoDB基本语法和操作入门(mongo.exe客户端操作) 库操作 插入 查询 修改 删除 存储过程 nodejs操作MongoDB 插入 查询 ...
- dogse入门指南
dogse入门指南 Dogse作为游戏服务端引擎,目前只包含游戏服务端的核心部分,但这也是最核心的部分.它全部使用.net c#开发,充分兼顾了程序性能与代码编写的准确性与易用性,再加上以vs作为开发 ...
- Nodejs学习笔记(十)—与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门
简介 MongoDB 开源,高性能的NoSQL数据库:支持索引.集群.复制和故障转移.各种语言的驱动程序:高伸缩性: NoSQL毕竟还处于发展阶段,也有说它的各种问题的:http://coolshel ...
- Web API 入门指南 - 闲话安全
Web API入门指南有些朋友回复问了些安全方面的问题,安全方面可以写的东西实在太多了,这里尽量围绕着Web API的安全性来展开,介绍一些安全的基本概念,常见安全隐患.相关的防御技巧以及Web AP ...
- Vue.js 入门指南之“前传”(含sublime text 3 配置)
题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴 ...
- yii2实战教程之新手入门指南-简单博客管理系统
作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...
- 【翻译】Fluent NHibernate介绍和入门指南
英文原文地址:https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started 翻译原文地址:http://www.cnblogs ...
随机推荐
- 在Yarn集群上跑spark wordcount任务
准备的测试数据文件hello.txt hello scala hello world nihao hello i am scala this is spark demo gan jiu wan le ...
- 腾讯云实验室 Gitea 互动教程上线啦
如果你想学习.体验或是向他人演示开源的 Gitea 代码托管方案,那么接下来给你推荐一款神器. 使用腾讯云实验室免费获得 Gitea 实验环境,直接通过浏览器就可在 Ubuntu Server 20. ...
- 使用 Win2D 实现融合效果
1. 融合效果 在 CSS 中有一种实现融合效果的技巧,使用模糊滤镜(blur)叠加对比度滤镜(contrast)使两个接近的元素看上去"粘"在一起,如下图所示: 博客园的 Cho ...
- redis cluster 6.2集群
redis最新版本:redis-6.2.1.tar.gz 安装的版本是redis-6.0.3 采用的主机: djz-server-001 192.168.2.163 7001,7002,Admin@1 ...
- 3.配置Grafana Dashboard
本次我们通过部署 Grafana 来进行图形展示,Grafana 为我们提供了非常多的图形模板. Grafana 官网:https://grafana.com/ 1.下载安装 Grafana 我们使用 ...
- day04-MySQL常用函数01
5.MySQL常用函数 5.1合计/统计函数 5.1.1合计函数-count count 返回行的总数 Select count(*)|count (列名) from table_name [WHER ...
- Dapr 长程测试和混沌测试
介绍 这是Dapr的特色项目,具体参见: https://github.com/dapr/test-infra/issues/11 ,在全天候运行的应用程序中保持Dapr可靠性至关重要.在部署真正的应 ...
- sql语句的组成
数据定义语言(DDL,Data Definition Language):包括CREATE(创建)ALTER(修改)DROP(删除)等. 数据操纵语言(DML,Data Manipulation La ...
- aws-cli命令-S3相关的操作及管理
在工作中,我们可能经常会将本地数据上传S3进行备份,或者将S3数据下载到本地 本文主要讲解下,工作中可能经常会用到的与S3相关的操作 1.将本地目录的数据同步到指定的S3位置,及s3资源管理 # 同步 ...
- NOIP2015 普及组 洛谷P2671 求和 (数学)
一道数学题...... 采用分组的思想,我们要统计答案的数对满足两个条件:同奇偶,同颜色.所以可以按这两个要求分组. 然后就是分组处理了,对于每组(有k个数),这里面的任意两对数都是满足条件的,可推出 ...