在 MongoDB 中,核心进程主要包含了 mongod、mongos 和 mongosh 三个。
其中最主要的是 mongod 程序,其在不同的部署方案中(单机部署、副本集部署、分片集群部署),通过不同的配置,可以扮演多种不同的角色:
在一台服务器上,可以启动多个 mongod 服务。但在实际生产部署中,通常是建议一台服务器部署一个 mongod 实例,这样不仅减少资源竞争,而且服务器故障也不会同时影响到多个服务。
mongos 在分片集群中扮演路由的角色,提供客户端和分片之间的接口。
mongosh 是 MongoDB 集成的交互式 shell 工具。
MongoDB 数据库工具是用于处理 MongoDB 部署的命令行实用程序的集合。数据库工具包括以下二进制文件:
MongoDB 数据逻辑结构分为数据库 database、集合 collection、文档 document 三层 :
一个数据库中可以创建多个集合,原则上应把逻辑相近的集合都放在一个数据库中。
在 MongoDB 中,会有以下几个内建的数据库:
和 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
中,此文件会在启动 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入门指南内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!