目录
一、MongoDB概述
(一)mongodb是一个nosql数据库,它有高性能、无模式、文档型的特点。是nosql数据库中功能最丰富,最像关系数据库的。数据库格式为BSON
(二)MongoDB 是一种面向文档的数据库系统,也可以说是一种基于对象的数据库。
(三)MongoDB 中的最基本单位是文档 (Document),每个文档都是一个对象,可以包含任意数量和任意深度的属性和数组。文档的属性可以是基本类型 (比如数字、字符串等) 或者其他文档类型,数组也可以包含任意类型的数据。
(四)MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
(五)MongoDB 的文档模型具有的特点
1、弱类型
2、动态模式
3、嵌套属性
4、对象引用
(六)相关概念
1、实例
2、库
3、集合
4、文档
5、主键
6、传统的关系型数据库(如MySQL),在数据操作的“三高”需求以及应对Web2.0的网站需求面前,显得力不从心。其中“三高”是指:
(七)MongoDB 特性
1、面向集合文档存储,适合存储json形式的数据;
2、格式自由,数据格式不固定,数据结构发生变更的同时不会影响程序运行;
3、面向对象的sql查询语句,基本涵盖关系型数据库的所有查询语句;
4、有索引的支持,查询效率更快;
5、支持复制和自动故障转移;
6、可以使用分片集群提升查询性能
(八)MongoDB 应用场景
1、游戏场景
2、物流场景
3、社交场景
4、物联网场景
5、视频直播
(九)MongoDB架构选型
(十)MongoDB服务端可运行在Linux、Windows平台,支持32位和64位应用,默认端口为27017。
二、MongoDB主要特点
三、RPM安装MongoDB
(一)vim /etc/yum.repos.d/mongodb.repo
(二)安装mongodb-org
四、目录结构的详细介绍
(一)使用“rpm -ql mongodb-org-server”命令返回的文件列表及其含义:
(二)使用“rpm -ql mongodb-org-shell”命令返回的文件列表及其含义:
(三)使用“rpm -ql mongodb-org-tools”命令返回的文件列表及其含义:
五、MongoDB默认数据库
(一)admin
(二)local
(三)config
六、数据库操作
(一)库操作
1、查看数据库
2、显示当前所在数据库 db
3、切换数据库 use dbName
4、数据库创建(隐式创建)
5、删除数据库
(二)文档操作
1、查看集合 show tables
2、创建集合 db.createCollection("test")
3、删除集合 db.需要删除的集合名称.drop()
4、插入数据(文档)
5、查询数据
6、删除数据
7、更新数据
七、MongoDB数据库备份
(一)备份命令
1、mongodump
2、mongoexport
(二)恢复命令
1、mongorestore
2、mongoimport
MongoDB 不要求文档中的属性具有相同的数据类型或者结构。
MongoDB 允许您在一个集合中存储不同结构的文档。
文档可以包含嵌套属性。
文档可以通过在一个文档中引用另一个文档来建立关系。
通过使用文档模型,MongoDB 实现了比关系型数据库更加灵活的数据存储方式。
系统上运行的mongodb的进程,类似于mysql实例;
每个数据库都是独立的,有自己的用户,权限,独立存储集合,类似于mysql的库;
由一组文档构成,类似于mysql的表;
mongodb数据库的最小数据集,是由多个键值对有序组合的数据单元,类似于mysql的数据记录;
唯一标识一行数据
① High performance - 对数据库高并发读写的需求。
②Huge Storage - 对海量数据的高效率存储和访问的需求。
③ High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求。
使用MongoDB存储游戏用户信息、装备、积分等,直接以内嵌文档的形式存储,方便查询、更新。
使用MongoDB存储订单信息、订单状态、物流信息,订单状态在运送过程中飞速迭代、以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更查出来,牛逼plus。
使用MongoDB存储用户信息,朋友圈信息,通过地理位置索引实现附近的人、定位功能。
使用MongoDB存储设备信息、设备汇报的日志信息、并对这些信息进行多维度分析。
使用MongoDB存储用户信息、点赞互动信息。
1、应用不需要事务及复杂 join 支持
2、新应用,需求会变,数据模型无法确定,想快速迭代开发
3、应用需要2000-3000以上的读写QPS(更高也可以)
4、应用需要TB甚至 PB 级别数据存储
5、应用要求存储的数据不丢失
6、应用需要99.999%高可用
7、应用需要大量的地理位置查询、文本查询
#上述有1个符合,可以考虑 MongoDB,2个及以上的符合,选择 MongoDB 绝不会后悔。
推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。
MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。
多个键及其关联的值有序地放在一起就构成了文档。
MongoDB文档类似于JSON对象。字段的值可以包括其他文档,数组和文档数组。
{“greeting”:“hello,world”}这个文档只有一个键“greeting”,对应的值为“hello,world”。多数情况下,文档比这个更复杂,它包含多个键/值对。
例如:{“greeting”:“hello,world”,“foo”: 3} 文档中的键/值对是有序的,下面的文档与上面的文档是完全不同的两个文档。{“foo”: 3 ,“greeting”:“hello,world”}
#文档中的值不仅可以是双引号中的字符串,也可以是其他的数据类型,例如,整型、布尔型等,也可以是另外一个文档,即文档可以嵌套。文档中的键类型只能是字符串。
#将以下内容写入mongodb.repo中
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
命令: yum -y install mongodb-org
启动数据库: systemctl start mongod
1、/etc/logrotate.d/mongod:MongoDB的日志文件的自动轮转配置文件。
2、/etc/mongod.conf:MongoDB的配置文件,其中包含了MongoDB的各种配置选项,例如端口号、数据目录、日志输出等。
3、/etc/sysconfig/mongod:MongoDB的启动脚本的配置文件,用于设置启动MongoDB的各种选项。
4、/usr/bin/mongod:MongoDB的服务器程序。
5、/usr/lib/systemd/system/mongod.service:MongoDB的systemd服务单元配置文件。
6、/usr/share/doc/mongodb-org-server-
7、/usr/share/licenses/mongodb-org-server-
8、/var/lib/mongo:MongoDB的数据目录,其中包含了所有的数据库文件和数据文件,例如*.ns、*.0等文件。
9、/var/log/mongodb:MongoDB的日志目录,其中包含了所有的日志文件,例如mongod.log等文件。
1、/usr/bin/bsondump:将MongoDB的BSON文件转换成JSON格式的工具。
2、/usr/bin/mongo:MongoDB的命令行客户端,用于连接和管理MongoDB实例。
3、/usr/bin/mongodump:将MongoDB数据库中的数据导出到文件中的工具。
4、/usr/bin/mongoexport:将MongoDB数据库中的数据导出到CSV、JSON或TSV等格式的文件中的工具。
5、/usr/bin/mongofiles:用于管理MongoDB的GridFS文件系统中的文件的工具。
6、/usr/bin/mongoimport:将CSV、JSON或TSV等格式的文件导入到MongoDB数据库中的工具。
7、/usr/bin/mongooplog:用于重放MongoDB的操作日志的工具。
8、/usr/bin/mongorestore:将MongoDB数据库中的数据从备份文件中恢复的工具。
9、/usr/bin/mongostat:用于监控MongoDB实例的状态的工具。
10、/usr/bin/mongotop:用于监控MongoDB实例的读写操作的工具。
11、/usr/share/doc/mongodb-org-shell-
12、/usr/share/licenses/mongodb-org-shell-
1、/usr/bin/bsondump:将MongoDB的BSON文件转换成JSON格式的工具。
2、/usr/bin/mongoexport:将MongoDB数据库中的数据导出到CSV、JSON或TSV等格式的文件中的工具。
3、/usr/bin/mongodump:将MongoDB数据库中的数据导出到文件中的工具。
4、/usr/bin/mongofiles:用于管理MongoDB的GridFS文件系统中的文件的工具。
5、/usr/bin/mongoimport:将CSV、JSON或TSV等格式的文件导入到MongoDB数据库中的工具。
6、/usr/bin/mongooplog:用于重放MongoDB的操作日志的工具。
7、/usr/bin/mongorestore:将MongoDB数据库中的数据从备份文件中恢复的工具。
8、/usr/bin/mongostat:用于监控MongoDB实例的状态的工具。
9、/usr/bin/mongotop:用于监控MongoDB实例的读写操作的工具。
10、/usr/share/doc/mongodb-org-tools-
11、/usr/share/licenses/mongodb-org-tools-
#mongodb-org-server是 MongoDB 服务器的软件包,它包含了 mongod(MongoDB 服务器进
程)和 mongos(MongoDB 分片路由进程)等核心组件。
# mongodb-org-shell是 MongoDB shell 客户端工具的软件包,它包含了 mongo 和 mongodump
等工具程序。
#mongodb-org-tools是 MongoDB 的其他命令行工具软件包,例如 mongostat、mongotop、
mongoexport、mongoimport 等。
从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。
一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
这个数据库永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
①show databases
② show dbs
①不用主动创建,使用use newDB,会自动创建不存在的数据库
②只有在库中创建集合后才会保存,并使用show dbs查看到
①use dbName
②db.dropDatabase()
①db.集合名称.insert({key:value}) 单行
注意两条命令的用法,以及所产生的结果②db.集合名称.insertmany([{key:value},{key:value},{key:value}]) 多行
#方括号 [ ] 通常用来表示一个数组。在此特定的命令中,数组中包含了待插入的多个文档对象,每个文档对象都是一个 JSON 格式的键值对集合。
③mongodb默认数字的数据类型float浮点型,若要改变为整型:NumberInt(数字)
①全集合查询
db.集合名称.find({})
db.集合名称.find()
②条件查询
db.info.find({查询条件1key:value,查询条件2,...},{key1:1|0,key2:1|0,...})
#key:1 显示,key:0 不显示
当显示的key只有一个时,key:1 只显示该key及对应value,key:0 显示除了该key之外其他所有keyvalue
示例一 示例二③查询集合中有多少文档 db.集合名称.count()
①全文删除 db.集合名称.remove({})
②条件删除 db.集合名称.remove({key:value})
①db.info.update({_id:"3"}, {$set:{nickname:"jack"}})
②所有满足条件的文档都进行更新
db.info.update({userid:"1003"},{$set:{nickname:"tom"}},{multi:true})
③更新文档进行数值递增
db.info.update({userid:"1003"},{$inc:{likenum:NumberInt(1000)}})
#mongodump 是 MongoDB 自带的备份工具,可以将整个数据库或指定的集合备份到一个 BSON 文件中。mongodump 工具通常与 mongorestore 命令搭配使用,可以将备份的数据恢复到 MongoDB 中。
#mongodump 可以备份整个数据库或者指定的集合。如果不指定集合名称,mongodump 会备份整个数据库。mongodump 还支持选项来限制备份的数量或者仅备份指定时间之后的数据。
①选项:
-h=hostname:port
-u=
-p=
--authenticationDatabase=
-d=
-o=
②语法:mongodump -d dbName -h hostName:port -u userName -p Password -o backupDirectory
语法:mongoexport -d dbName -c tableName -h hostName:port -u userName -p Password -o backupDirectory/jsonFile.json
#mongoexport 是 MongoDB 的数据导出工具,可将 MongoDB 数据库中的数据以 JSON 或 CSV 等格式导出到文件或者标准输出流中。
#mongoexport 命令的基本用法是指定要导出的数据库名称(--db
)、集合名称(--collection
)和输出文件名称或者输出流(--out
)。其他常用选项可以根据需求进行选择,例如指定导出的字段列表(--fields
)、查询条件(--query
)、最大记录数(--limit
)等。如果希望输出到标准输出流,可以将输出文件名称设置为 -(减号)。
语法:mongorestore -h hostName -u username -p password -d dbName -c tableName bakcupDirector/bsonFile
#mongorestore 是 MongoDB 自带的数据恢复工具,可以将由 mongodump 命令生成的备份文件恢复到 MongoDB 数据库中。mongorestore 命令需要指定备份文件的位置和恢复目标数据库的位置。
#mongorestore 可以恢复由 mongodump 命令生成的备份文件,但也可以恢复其他生成备份的工具生成的备份文件。mongorestore 会比较备份文件中的集合和已存在的集合,如果有相同的集合,mongorestore 会更新已存在的集合,如果集合已从数据库中删除,mongorestore 会重新创建一个新集合。
语法:mongoimport -d dbName -c tableName -h hostName:port -u userName -p Password backupDirectory/jsonFile.json
#mongoimport 是 MongoDB 自带的数据导入工具,可以将文件中的数据导入到 MongoDB 数据库中。mongoimport 支持多种数据格式,包括 JSON、CSV、TSV 和 BSON 等格式。
#mongoimport 支持多种数据格式,可以灵活指定要导入数据的格式,如 JSON 格式、CSV 格式等。导入数据时,如果指定的集合已经存在,则mongoimport 默认会向集合中继续添加数据;如果要删除原有数据,可以使用 --drop
参数。