目录
[3、启动服务:systemctl start mongod](#3、启动服务:systemctl start mongod)
[(一)rpm -ql mongodb-org-server](#(一)rpm -ql mongodb-org-server)
13、MongoDB的日志文件,记录MongoDB的运行日志
[(二)rpm -ql mongodb-org-shell](#(二)rpm -ql mongodb-org-shell)
[(三)rpm -ql mongodb-org-tools](#(三)rpm -ql mongodb-org-tools)
[2、用于安装MongoDB Compass的工具](#2、用于安装MongoDB Compass的工具)
4、用于将数据从MongoDB导出为JSON、CSV或TSV格式的工具
[5、用于在MongoDB GridFS中存储和检索文件的工具](#5、用于在MongoDB GridFS中存储和检索文件的工具)
[(四)rpm -ql mongodb-org-mongos](#(四)rpm -ql mongodb-org-mongos)
一、概述
mongodb是一个nosql数据库,它有高性能、无模式、文档型的特点。是nosql数据库中功能最丰富,最像关系数据库的。数据库格式为BSON
(一)相关概念
实例:系统上运行的mongodb的进程,类似于mysql实例;
库:每个数据库都是独立的,有自己的用户,权限,独立存储集合,类似于mysql的库;
集合:由一组文档构成,类似于mysql的表;
文档:mongodb数据库的最小数据集,是由多个键值对有序组合的数据单元,类似于mysql的数据记录;
主键:唯一标识一行数据
(二)特性
1、面向集合文档存储,适合存储json形式的数据;
2、格式自由,数据格式不固定,数据结构发生变更的同时不会影响程序运行;
3、面向对象的sql查询语句,基本涵盖关系型数据库的所有查询语句;
4、有索引的支持,查询效率更快;
5、支持复制和自动故障转移;
6、可以使用分片集群提升查询性能
面向对象:
在MongoDB中,数据以文档(documents)的形式存储,文档是一种类似于JSON格式的数据结构,它可以包含键值对、数组和嵌套文档。文档是MongoDB中的基本数据单元,类似于关系型数据库中的行(row)。
MongoDB的面向对象概念具有以下特点:
文档模型:MongoDB使用文档模型来表示数据,文档可以嵌套和包含各种类型的数据,这使得MongoDB非常适合存储半结构化数据。
动态模式:相比关系型数据库,MongoDB的文档模型是动态的,即同一集合中的不同文档可以具有不同的结构。这样可以更容易地适应数据模式的变化和灵活性要求。
继承和多态:MongoDB支持文档之间的继承关系,一个文档可以从另一个文档继承属性。同时,MongoDB还支持多态,即一个字段可以包含不同类型的值。
引用关联:MongoDB支持使用引用关联文档,即一个文档中可以包含对其他文档的引用。这种引用关联可以用来建立文档之间的关系和查询数据。
MongoDB的面向对象概念使得它更适合存储和处理半结构化数据,同时提供了灵活性和扩展性,方便开发者处理不同类型的数据和建立数据之间的关联。
索引概念:
MongoDB索引是MongoDB中用于提高查询性能的数据结构。它类似于关系数据库中的索引,可以按照特定字段或字段组合进行排序和搜索。
MongoDB索引通常使用B树数据结构实现。它可将数据存储在内存中,以加快查询速度。当查询需要访问大量数据时,索引可以帮助减少磁盘IO操作,提高查询性能。
索引可以在单个字段上创建,也可以在多个字段上创建组合索引。创建索引后,MongoDB将使用这些索引来加速查询过程。索引可以按升序或降序排序,还可以设置唯一性约束,确保索引字段的唯一性。
索引的创建和使用需要权衡考虑。创建过多的索引会增加存储空间和写入操作的开销,同时也会增加更新数据的复杂性。此外,索引的选择要基于实际查询模式和性能需求进行评估。
总结来说,MongoDB索引是用于提高查询性能的数据结构,它可以按照特定字段或字段组合进行排序和搜索,并使用B树数据结构进行实现。索引的创建和使用需要考虑存储空间、写入操作开销和查询需求等因素。
二、应用场景
大数据存储和分析:由于MongoDB的灵活性和可扩展性,它非常适合用于存储和分析大规模数据集。它可以处理海量的数据,并支持数据聚合、数据分析和实时查询。
实时分析和日志处理:MongoDB可以快速地存储和索引生成的数据,使其适用于实时分析和日志处理。它可以轻松处理大量实时数据,并提供快速的查询和聚合功能。
内容管理和博客平台:MongoDB的文档模型非常适合存储和管理文本和多媒体内容。它支持动态模式,可以轻松地适应不同类型和格式的内容。
社交网络和实时应用:MongoDB对于实时应用和高并发的场景具有很好的性能。它可以处理大量的读写操作,并提供可扩展性和高可用性。
互联网应用程序:MongoDB适合用于构建Web应用程序,如电子商务平台、内容管理系统和在线游戏。它可以处理复杂的数据模型和高并发的访问请求。
总结来说,MongoDB适用于处理大规模数据、实时分析、内容管理、社交网络和互联网应用程序等各种场景。它提供高性能、可扩展性和灵活性,使开发人员能够构建出功能强大的应用程序。
三、安装
(一)编译安装
(二)yum安装
1、首先制作repo源
vim /etc/yum.repos.d/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
2、软件包名:mongodb-org
3、启动服务:systemctl start mongod
4、监听端口:mongod
5、端口号:27017
四、目录结构
(一)rpm -ql mongodb-org-server
1、MongoDB的配置文件
vim /etc/mongod.conf
|-------------------|-------|
| port: 27017 | 监听端口号 |
| bindIp: 127.0.0.1 | 监听地址 |
2、MongoDB的运行目录
/run/mongodb
3、MongoDB的可执行文件
/usr/bin/mongod
4、MongoDB的系统服务文件
/usr/lib/systemd/system/mongod.service
5、MongoDB的文档目录
/usr/share/doc/mongodb-org-server-4.2.24
6、MongoDB的许可协议文件
/usr/share/doc/mongodb-org-server-4.2.24/LICENSE-Community.txt
7、MongoDB的许可协议文件
/usr/share/doc/mongodb-org-server-4.2.24/MPL-2
8、MongoDB的README文件
/usr/share/doc/mongodb-org-server-4.2.24/README
9、MongoDB的第三方许可通知文件
/usr/share/doc/mongodb-org-server-4.2.24/THIRD-PARTY-NOTICES
10、MongoDB的man手册文件
/usr/share/man/man1/mongod.1.gz
11、MongoDB的数据目录,存储数据库文件
/var/lib/mongo
12、MongoDB的日志目录,存储日志文件
/var/log/mongodb
13、MongoDB的日志文件,记录MongoDB的运行日志
/var/log/mongodb/mongod.log
(二)rpm -ql mongodb-org-shell
1、MongoDB客户端工具的可执行文件路径(客户端命令)
/usr/bin/mongo
2、MongoDB客户端工具的man手册文件路径
/usr/share/man/man1/mongo.1.gz
(三)rpm -ql mongodb-org-tools
1、将BSON文件转换为JSON格式的工具
/usr/bin/bsondump
2、用于安装MongoDB Compass的工具
/usr/bin/install_compass
3、用于从MongoDB数据库中导出数据的工具
/usr/bin/mongodump
4、用于将数据从MongoDB导出为JSON、CSV或TSV格式的工具
/usr/bin/mongoexport
5、用于在MongoDB GridFS中存储和检索文件的工具
/usr/bin/mongofiles
6、用于将数据导入MongoDB数据库的工具
/usr/bin/mongoimport
7、用于从mongodump创建的备份文件中恢复数据的工具
/usr/bin/mongorestore
8、用于监视MongoDB服务器状态的工具
/usr/bin/mongostat
9、用于监视MongoDB实例中的操作的工具
/usr/bin/mongotop
10、包含MongoDB工具集的文档
/usr/share/doc/mongodb-org-tools-4.2.24
11、包含MongoDB工具集的第三方软件许可证通知
/usr/share/doc/mongodb-org-tools-4.2.24/THIRD-PARTY-NOTICES.gotools
12、bsondump工具的man页
/usr/share/man/man1/bsondump.1.gz
13、mongodump工具的man页
/usr/share/man/man1/mongodump.1.gz
14、mongoexport工具的man页
/usr/share/man/man1/mongoexport.1.gz
15、mongofiles工具的man页
/usr/share/man/man1/mongofiles.1.gz
16、mongoimport工具的man页
/usr/share/man/man1/mongoimport.1.gz
17、mongoldap工具的man页
/usr/share/man/man1/mongoldap.1.gz
18、mongoreplay工具的man页
/usr/share/man/man1/mongoreplay.1.gz
19、mongorestore工具的man页
/usr/share/man/man1/mongorestore.1.gz
20、mongostat工具的man页
/usr/share/man/man1/mongostat.1.gz
21、mongotop工具的man页
/usr/share/man/man1/mongotop.1.gz
(四)rpm -ql mongodb-org-mongos
1、存放系统范围的可执行文件
/usr/bin/mongos
2、mongos的手册页文件
/usr/share/man/man1/mongos.1.gz
五、默认数据库
进入MongoDB数据库命令
mongo
1、admin
从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。
一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
2、local
这个数据库永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
3、config
当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
六、数据库操作
(一)库操作
1、查看数据库
注:以下命令二选一即可,均可正常使用。
show databases
show dbs
2、显示当前所在数据库
db
3、切换数据库
use zn
4、数据库创建
4.1、隐式创建
不用主动创建,使用use newDB,会自动创建不存在的数据库,只有在库中创建集合后才会保存,并使用show dbs查看到
4.2、删除数据库
use dbName
db.dropdatabase()
(二)文档操作
1、创建集合
db.createCollection('wjy')
2、查看集合
show tables
3、删除
3.1、删除数据库
db.dropDatabase()
注:在删除数据库时,一定要先进入要删除的数据库
3.2、删除集合
db.需要删除的集合名称.drop()
db.wjy.drop()
db["123"].drop()是指在数据库中删除名为"123"的集合(collection)或表(table)。
其中,db是数据库对象,["123"]表示要操作的集合或表的名称,drop()表示删除该集合或表。
db.getCollection("123").drop()
4、插入数据(文档)
4.1、单行
db.集合名称.insert({key:value})
db.wjy.insert({'a':'123'})
查看命令:
db.wjy.find({})
内容解析:
{ "_id" : ObjectId("64da1f759aabd69ea17751d8"), "a" : "123" }
|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 这是一个MongoDB的文档数据,结构如下: { "_id" : ObjectId("64da1f759aabd69ea17751d8"), "a" : "123" } 其中:_id
是文档的唯一标识符,由MongoDB自动生成,用于唯一标识该文档。a
是文档中的一个字段,它的值是字符串 "123"。 |
4.2、多行
db.集合名称.insertmany([{key:value},{key:value},{key:value}])
db.wjy.insertMany([{'b':'1234'},{'c':'12345'},{'d':'123456'}])
内容解析:
这是一个MongoDB的操作结果,对应的内容解析如下:
acknowledged
表示操作是否被MongoDB服务器确认执行。如果值为true,表示操作已被成功确认。insertedIds
表示插入操作成功后生成的文档的唯一标识符(ObjectIds)的列表。在这个例子中,三个文档被成功插入,它们的唯一标识符分别是:
- ObjectId("64da20c76fb9e74578a149d1")
- ObjectId("64da20c76fb9e74578a149d2")
- ObjectId("64da20c76fb9e74578a149d3")
这个操作的结果说明在执行插入操作后,MongoDB服务器已经成功确认了操作,并且返回了生成的插入文档的唯一标识符列表。
db.wjy.find({})
mongodb默认数字的数据类型float浮点型,若要改变为整型:NumberInt(数字)两种方式:
db.wjy.insert({'_id':'1','a':'123','phone':'111111'})
db.wjy.insert({'_id':NumberInt(2),'b':'1234','phone':'222222'})
删除数据
db.wjy.deleteMany({})
5、查询数据
5.1全集合查询
db.集合名称.find({})
db.wjy.find({})
db.集合名称.find()
db.wjy.find()
5.2、条件查询
db.info.find({查询条件1key:value,查询条件2,...},{key1:1|0,key2:1|0,...})
db.wjy.find({'a':'123'})
db.wjy.find({'a':'123'},{'a':0})
命令解析:
db.wjy
表示在数据库中选择集合wjy
进行查询。db
是数据库对象,wjy
是集合名称。find({'a':'123'})
表示查询集合中的文档,其中字段a
的值为'123'
。{'a':0}
表示设置查询结果中不包含字段a
。在查询结果中,其他字段将会被返回,而字段a
不会被返回。这个查询操作的意思是,在集合
wjy
中查找字段a
的值为'123'
的文档,并返回这些文档中除了字段a
以外的其他字段。
key:1 显示,key:0 不显示
当显示的key只有一个时,key:1 只显示该key及对应value,key:0 显示除了该key之外其他所有keyvalue
5.3、查询集合中有多少文档
db.集合名称.count()
db.wjy.count()
6、删除数据
6.1、全文删除
db.集合名称.remove({})
db.wjy.remove({})
6.2、条件删除
db.集合名称.remove({key:value})
db.wjy.remove({'b':'1234'})
7、更新数据
db.wjy.update({_id:'1'},{$set:{'phone':'222222'}})
7.1、所有满足条件的文档都进行更新
db.info.update({userid:"1003"},{$set:{nickname:"tom"}},{multi:true})
7.2、更新文档进行数值递增
db.info.update({userid:"1003"},{$inc:{likenum:NumberInt(1000)}})
先创建5个同名,方面更改完成查看
第一个:
db.wjy.update({userID:NumberInt(1)},{$inc:{userID:NumberInt(10)}})
第二个:
db.wjy.update({userID:NumberInt(1)},{$inc:{userID:NumberInt(20)}})
第三个:
db.wjy.update({userID:NumberInt(1)},{$inc:{userID:NumberInt(30)}})
第四个:
db.wjy.update({userID:NumberInt(1)},{$inc:{userID:NumberInt(-20)}})
第五个:
db.wjy.update({userID:NumberInt(1)},{$inc:{userID:NumberInt(-10)}})
七、MongoDB数据库备份
(一)备份命令
1、mongodump
选项
-h=hostname:port
-u=<username>
-p=<password>
--authenticationDatabase=<dbname>
-d=<database>
-o=<path>
语法
mongodump -d dbName -h hostName:port -u userName -p Password -o backupDirectory
mkdir /bak
mongodump -d zn -o /bak
2、mongoexport
选项
-h=hostname:port
-u=<username>
-p=<password>
--authenticationDatabase=<dbname>
-d=<database>
-o=<path>
语法
mongoexport -d dbName -c tableName -h hostName:port -u userName -p Password -o backupDirectory/jsonFile.json
mongoexport -d zn -c wjy -o /bak/zn_wjy-bak.json
(二)恢复命令
注:在恢复备份前,我们先删除 zn 数据库,不然无法体现出恢复效果
1、mongorestore
选项
-h=hostname:port
-u=<username>
-p=<password>
--authenticationDatabase=<dbname>
-d=<database>
--drop 当目标数据库中存在同名集合则删除再恢复
语法
mongorestore -h hostName -u username -p password -d dbName -c tableName bakcupDirector/bsonFile
mongorestore -d zn -c wjy /bak/zn/wjy.bson
内容解析:
checking for collection data in /bak/zn/wjy.bson:检查备份文件/bak/zn/wjy.bson中是否有集合数据。
reading metadata for zn.wjy from /bak/zn/wjy.metadata.json:从备份文件/bak/zn/wjy.metadata.json中读取集合"zn.wjy"的元数据信息。
restoring zn.wjy from /bak/zn/wjy.bson:从备份文件/bak/zn/wjy.bson中恢复集合"zn.wjy"的数据。
no indexes to restore:没有索引需要恢复。
finished restoring zn.wjy (5 documents, 0 failures):成功完成集合"zn.wjy"的数据恢复,总共恢复了5个文档,没有失败的文档。
5 document(s) restored successfully. 0 document(s) failed to restore.:成功恢复了5个文档,没有失败的文档。
mongo
show dbs
use zn
show tables
db.wjy.find({})
现在已经验证备份已经恢复完毕
2、mongoimport
注:在恢复备份前,我们先删除 zn 数据库下的 wjy 集合,不然无法体现出恢复效果
db.wjy.drop()
选项
-h=hostname:port
-u=<username>
-p=<password>
--authenticationDatabase=<dbname>
-d=<database>
--drop 当目标数据库中存在同名集合则删除再恢复
语法
mongoimport -d dbName -c tableName -h hostName:port -u userName -p Password backupDirectory/jsonFile.json
mongoimport -d zn -c wjy /bak/zn_wjy-bak.json
内容解析:
2023-08-14T23:05:48.974+0800 connected to: mongodb://localhost/
2023-08-14T23:05:48.982+0800 5 document(s) imported successfully. 0 document(s) failed to import.
进入数据库查看验证
mongo
show dbs
show tables
db.wjy.find({})
经过查看,数据库集合内容已经成功进行恢复
总结
MongoDB是一种强大的非关系型数据库,具有高性能、灵活的数据模型和丰富的功能。它适用于各种应用场景,包括大数据、实时分析和Web应用程序等。尽管使用MongoDB需要一些学习和配置,但它提供的性能和可扩展性使得它成为许多开发者和组织的首选数据库管理系统。