Mongo DB 安装及基础操作

目录

前言

一、MongoDB概述

相关概念:

特性:

应用场景:

二、MongoDB安装

三、目录结构

四、数据库基本操作

1、结构默认数据库

2、基本命令

3、文档操作

五、MongoDB备份

备份命令

 恢复命令



前言

MongoDB是一种开源的、基于文档的NoSQL数据库管理系统。它是由10gen(现为MongoDB Inc.)开发和维护的。MongoDB的设计目标是提供灵活的、可扩展的数据存储解决方案,适用于各种类型的应用程序。
与传统的关系型数据库不同,MongoDB采用了文档存储模式,即将数据以文档的形式存储在集合(collection)中。每个文档都是一个自包含的数据结构,可以包含不同类型的字段,这使得MongoDB非常适合存储半结构化的数据。
MongoDB支持丰富的查询语言和功能,包括复杂的查询、索引、聚合和地理空间查询等。它还具有自动分片和复制功能,可以实现高可用性和可扩展性。
由于其灵活性和可扩展性,MongoDB被广泛应用于各种类型的应用程序,如Web应用程序、物联网、大数据分析等。它也是许多大型互联网公司和初创公司的首选数据库解决方案之一。
 


一、MongoDB概述

mongodb是一个nosql数据库,它有高性能、无模式、文档型的特点。是nosql数据库中功能最丰富,最像关系数据库的。数据库格式为BSON

相关概念:

实例:系统上运行的mongodb的进程,类似于mysql实例;
库:每个数据库都是独立的,有自己的用户,权限,独立存储集合,类似于mysql的库;
集合:由一组文档构成,类似于mysql的表;
文档:mongodb数据库的最小数据集,是由多个键值对有序组合的数据单元,类似于mysql的数据记录;
主键:唯一标识一行数据

特性:

1、面向集合文档存储,适合存储json形式的数据;
 2、格式自由,数据格式不固定,数据结构发生变更的同时不会影响程序运行;
 3、面向对象的sql查询语句,基本涵盖关系型数据库的所有查询语句 ;
 4、有索引的支持,查询效率更快;
5、支持复制和自动故障转移;
 6、可以使用分片集群提升查询性能

应用场景:

   游戏
物流
 社交
 物联网
 视频直播
大数据

二、MongoDB安装

这里我们采用yum安装:

1、确保我们的主机能够上网,来到我们 /etc/yum.repos.d/配置网络源

cd /etc/yum.repos.d/
mkdir back
mv CentOS-* back/
vim 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、下载yum -y install mongodb-org

yum -y install mongodb-org

3.启动数据库 systemctl start mongod.service端口:27017

[root@localhost mongodb]# systemctl start mongod
[root@localhost mongodb]# netstat -anput | grep mongod
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      41729/mongod        
[root@localhost mongodb]# 

三、目录结构

1、查看目录 rpm -ql mongodb-org-server 

[root@localhost mongodb]# rpm -ql mongodb-org-server 
/etc/mongod.conf
/run/mongodb
/usr/bin/mongod
/usr/lib/systemd/system/mongod.service
/usr/share/doc/mongodb-org-server-4.2.24
/usr/share/doc/mongodb-org-server-4.2.24/LICENSE-Community.txt
/usr/share/doc/mongodb-org-server-4.2.24/MPL-2
/usr/share/doc/mongodb-org-server-4.2.24/README
/usr/share/doc/mongodb-org-server-4.2.24/THIRD-PARTY-NOTICES
/usr/share/man/man1/mongod.1.gz
/var/lib/mongo
/var/log/mongodb
/var/log/mongodb/mongod.log
/etc/mongod.conf 主配置文件 、port: 27017监听端口号、bindIp: 127.0.0.1 监听地址
/run/mongodb  PID文件
/usr/bin/mongod 启动命令
/var/lib/mongo 存储数据文件
/var/log/mongodb     日志

2、rpm -ql mongodb-org-shell

[root@localhost mongodb]# rpm -ql mongodb-org-shell
/usr/bin/mongo
/usr/share/man/man1/mongo.1.gz
/usr/bin/mongo  客户端命令

3、rpm -ql mongodb-org-tools

[root@localhost mongodb]# rpm -ql mongodb-org-tools
/usr/bin/bsondump
/usr/bin/install_compass
/usr/bin/mongodump
/usr/bin/mongoexport
/usr/bin/mongofiles
/usr/bin/mongoimport
/usr/bin/mongorestore
/usr/bin/mongostat
/usr/bin/mongotop
/usr/share/doc/mongodb-org-tools-4.2.24
/usr/share/doc/mongodb-org-tools-4.2.24/THIRD-PARTY-NOTICES.gotools
/usr/share/man/man1/bsondump.1.gz
/usr/share/man/man1/mongodump.1.gz
/usr/share/man/man1/mongoexport.1.gz
/usr/share/man/man1/mongofiles.1.gz
/usr/share/man/man1/mongoimport.1.gz
/usr/share/man/man1/mongoldap.1.gz
/usr/share/man/man1/mongoreplay.1.gz
/usr/share/man/man1/mongorestore.1.gz
/usr/share/man/man1/mongostat.1.gz
/usr/share/man/man1/mongotop.1.gz
/usr/bin/mongodump     备份数据库
/usr/bin/mongoexport     备份文档
/usr/bin/mongoimport     恢复文档
/usr/bin/mongorestore    恢复数据库

四、数据库基本操作

1、结构默认数据库

    admin
       
从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。
一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
 local
    
    这个数据库永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
 config
        
当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

2、基本命令

 查看数据库  show databases或 show dbs
 显示当前所在数据库   db
切换数据库   use  dbName
 数据库创建  隐式创建:不用主动创建,使用use newDB,会自动创建不存在的数据库,只有在库中创建集合后才会保存,并使用show dbs查看到

 删除数据库

     先use dbName  后 db.dropdatabase()

在本地什么都没有配置的情况下使用:mongo命令进入MongoDB

创建数据库hy

use hy
db.createCollection("test")

Mongo DB 安装及基础操作_第1张图片

3、文档操作

 查看集合  show tables
创建集合  db.createCollection("test")
删除集合 db.需要删除的集合名称.drop()
 插入数据(文档)

单行:db.集合名称.insert({key:value})

多行: db.集合名称.insertmany([{key:value},{key:value},{key:value}])

 (mongodb默认数字的数据类型float浮点型,若要改变为整型:NumberInt(数字) )

 查询数据

  1.全集合查询:
            db.集合名称.find({})
            db.集合名称.find()

2.  条件查询:
            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

3.查询集合中有多少文档:
            db.集合名称.count()

 删除数据

 1.全文删除:
            db.集合名称.remove({})

2.  条件删除:
            db.集合名称.remove({key:value})

 更新数据

格式 db.info.update({_id:"3"}, {$set:{nickname:"jack"}})
       1、所有满足条件的文档都进行更新:

   db.info.update({userid:"1003"},{$set:{nickname:"tom"}},{multi:true})

        2、 更新文档进行数值递增:

 db.info.update({userid:"1003"},{$inc:{likenum:NumberInt(1000)}})

1)插入

单行插入db.hy.insert({'id':'1','name':'hy1','age':'18'})

 多行插入db.hy.insertMany([{'id':'2','name':'hy2','age':'19'},{'id':'3','name':'hy3','age':'20'}])注意([{}])Mongo DB 安装及基础操作_第2张图片

2)查询

全集合查询db.hy.find()

条件查询db.hy.find({'id':'2'})当ID=2时的有哪些

 条件查询db.hy.find({'id':'2'},{'name':'1'})其中{'name':'1'}指的是只显示name,{'name':'0'}则是除了name都显示

 3)数据更新

单个数据更新

db.hy.update({'name':'hy1'},{$set:{'id':'99'}})

db.hy.update({'name':'hy1'},{$set:{'age':'88'}})

Mongo DB 安装及基础操作_第3张图片

 将满足条件的数据都更新

先插入几条有共同点的数据db.hy.insertMany([{'id':'2','name':'hy4','age':'20'},{'id':'2','name':'hy5','age':'20'}])

> db.hy.insertMany([{'id':'2','name':'hy4','age':'20'},{'id':'2','name':'hy5','age':'20'}])
{
	"acknowledged" : true,
	"insertedIds" : [
		ObjectId("64da3e5ccbf20d8dc76b334b"),
		ObjectId("64da3e5ccbf20d8dc76b334c")
	]
}
> db.hy.find()
{ "_id" : ObjectId("64da337fcbf20d8dc76b3348"), "id" : "99", "name" : "hy1", "age" : "88" }
{ "_id" : ObjectId("64da3428cbf20d8dc76b3349"), "id" : "2", "name" : "hy2", "age" : "19" }
{ "_id" : ObjectId("64da3428cbf20d8dc76b334a"), "id" : "3", "name" : "hy3", "age" : "20" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334b"), "id" : "2", "name" : "hy4", "age" : "20" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334c"), "id" : "2", "name" : "hy5", "age" : "20" }
> 

将所有id为2的年龄改为666    db.hy.update({'id':'2'},{$set:{'age':'666'}},{multi:true})

db.hy.update({'id':'2'},{$set:{'age':'666'}},{multi:true})
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
> db.hy.find()
{ "_id" : ObjectId("64da337fcbf20d8dc76b3348"), "id" : "99", "name" : "hy1", "age" : "88" }
{ "_id" : ObjectId("64da3428cbf20d8dc76b3349"), "id" : "2", "name" : "hy2", "age" : "666" }
{ "_id" : ObjectId("64da3428cbf20d8dc76b334a"), "id" : "3", "name" : "hy3", "age" : "20" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334b"), "id" : "2", "name" : "hy4", "age" : "666" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334c"), "id" : "2", "name" : "hy5", "age" : "666" }
> 

插入一条带数据属性的内容db.hy.insert({'id':'7','name':'hy7','age':NumberInt(20)})把他的年龄递增100要  注意的是:如果插入的数值前没有NumberInt是无法进行此操作的

db.hy.insert({'id':'7','name':'hy7','age':NumberInt(20)})
WriteResult({ "nInserted" : 1 })
> db.hy.find()
{ "_id" : ObjectId("64da337fcbf20d8dc76b3348"), "id" : "99", "name" : "hy1", "age" : "88" }
{ "_id" : ObjectId("64da3428cbf20d8dc76b3349"), "id" : "2", "name" : "hy2", "age" : "666" }
{ "_id" : ObjectId("64da3428cbf20d8dc76b334a"), "id" : "3", "name" : "hy3", "age" : "20" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334b"), "id" : "2", "name" : "hy4", "age" : "666" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334c"), "id" : "2", "name" : "hy5", "age" : "666" }
{ "_id" : ObjectId("64da414bcbf20d8dc76b334d"), "id" : "7", "name" : "hy7", "age" : 20 }
> db.hy.update({'id':'7'},{$inc:{'age':NumberInt(100)}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.hy.find()
{ "_id" : ObjectId("64da337fcbf20d8dc76b3348"), "id" : "99", "name" : "hy1", "age" : "88" }
{ "_id" : ObjectId("64da3428cbf20d8dc76b3349"), "id" : "2", "name" : "hy2", "age" : "666" }
{ "_id" : ObjectId("64da3428cbf20d8dc76b334a"), "id" : "3", "name" : "hy3", "age" : "20" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334b"), "id" : "2", "name" : "hy4", "age" : "666" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334c"), "id" : "2", "name" : "hy5", "age" : "666" }
{ "_id" : ObjectId("64da414bcbf20d8dc76b334d"), "id" : "7", "name" : "hy7", "age" : 120 }
> 

五、MongoDB备份

`mongodump`和`mongoexport`以及`mongorestore`和`mongoimport`是MongoDB中两组相关但略有不同的工具。它们之间的主要区别如下:

1. `mongodump`与`mongoexport`:
   - `mongodump`用于备份整个MongoDB数据库或指定的数据库。它将数据以二进制格式保存,包括集合和索引等数据库元数据,并可以选择备份整个数据库或仅备份特定的集合。
   - `mongoexport`用于导出MongoDB集合中的数据。它以JSON、CSV或TSV等格式导出数据,并且不包括集合和索引等数据库元数据。

2. `mongorestore`与`mongoimport`:
   - `mongorestore`用于从备份文件中恢复MongoDB数据库。它可以还原通过`mongodump`工具备份的整个数据库或指定的数据库。
   - `mongoimport`用于将数据从文件中导入到MongoDB集合中。它支持导入多种格式的文件内容,如JSON、CSV或TSV,并将数据插入到指定的集合中。

总结:
- `mongodump`用于备份MongoDB数据库,而`mongoexport`用于导出MongoDB集合数据。
- `mongorestore`用于从备份文件中恢复MongoDB数据库,`mongoimport`用于将文件数据导入到MongoDB集合中。

备份命令

mongodump
    
    

选项
        -h=hostname:port
        -u=
        -p=

--authenticationDatabase=
        -d=
        -o=

语法
        mongodump -d dbName -h hostName:port -u userName -p Password -o backupDirectory
mongoexport
    
  
选项
        -h=hostname:port
        -u=
        -p=
-- authenticationDatabase=
        -d=
        -o=
 语法
        mongoexport -d dbName -c tableName -h hostName:port -u userName -p Password -o backupDirectory/jsonFile.json

1、备份库的命令是:mongodump

语法: mongodump -d dbName -h hostName:port -u userName -p Password -o backupDirectory

备份库hy: mongodump -d hy -o /opt/hy-back.json

##备份库hy
[root@localhost opt]# mongodump -d hy -o /opt/hy-back.json
2023-08-15T09:24:40.821+0800	writing hy.test to /opt/hy-back.json/hy/test.bson
2023-08-15T09:24:40.821+0800	done dumping hy.test (6 documents)
[root@localhost opt]# cd /opt/hy-back.json/hy/
[root@localhost hy]# ls
test.bson  test.metadata.json
[root@localhost hy]# 

2、备份表命令:mongoexport

语法: mongoexport -d dbName -c tableName -h hostName:port -u userName -p Password -o backupDirectory/jsonFile.json

备份合集test:

##备份集合test
[root@localhost hy]# mongoexport -d hy -c test -o /opt/test-back.json
2023-08-15T09:58:16.780+0800	connected to: mongodb://localhost/
2023-08-15T09:58:16.784+0800	exported 6 records
##查看
[root@localhost opt]# ls
rh  test-back.json

 恢复命令

mongorestore
  
  
 选项
        -h=hostname:port
        -u=
        -p=
        --authenticationDatabase=
        -d=
        --drop 当目标数据库中存在同名集合则删除再恢复
 语法
        mongorestore -h hostName -u username -p password -d dbName -c tableName bakcupDirector/bsonFile
mongoimport
  
 
 选项
        -h=hostname:port
        -u=
        -p=
        --authenticationDatabase=
        -d=
        --drop 当目标数据库中存在同名集合则删除再恢复
   语法
        mongoimport -d dbName -c tableName -h hostName:port -u userName -p Password  backupDirectory/jsonFile.json

1、恢复数据库hy命令 :mongorestore

语法: mongorestore -h hostName -u username -p password -d dbName -c tableName bakcupDirector/bsonFile

进入库hy并删除hy

> show dbs
admin   0.000GB
config  0.000GB
hy      0.000GB
local   0.000GB
> show tables
test
> show dbs
admin   0.000GB
config  0.000GB
hy      0.000GB
local   0.000GB
> use hy
switched to db hy
> db.dropDatabase()
{ "dropped" : "hy", "ok" : 1 }
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> 

恢复库hy

[root@localhost hy]# ls /opt/hy-back.json/*
test.bson  test.metadata.json
[root@localhost hy]# mongorestore -d hy -c test /opt/hy-back.json/hy/test.bson 
2023-08-15T09:35:37.875+0800	checking for collection data in /opt/hy-back.json/hy/test.bson
2023-08-15T09:35:37.875+0800	reading metadata for hy.test from /opt/hy-back.json/hy/test.metadata.json
2023-08-15T09:35:37.878+0800	restoring hy.test from /opt/hy-back.json/hy/test.bson
2023-08-15T09:35:37.971+0800	no indexes to restore
2023-08-15T09:35:37.971+0800	finished restoring hy.test (6 documents, 0 failures)
2023-08-15T09:35:37.971+0800	6 document(s) restored successfully. 0 document(s) failed to restore.
##登录MongoDB验证
> db.dropDatabase()
{ "dropped" : "hy", "ok" : 1 }
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> show dbs
admin   0.000GB
config  0.000GB
hy      0.000GB
local   0.000GB
> use hy
switched to db hy
> show tables
test
> db.test.find()
{ "_id" : ObjectId("64da337fcbf20d8dc76b3348"), "id" : "99", "name" : "hy1", "age" : "88" }
{ "_id" : ObjectId("64da3428cbf20d8dc76b3349"), "id" : "2", "name" : "hy2", "age" : "666" }
{ "_id" : ObjectId("64da3428cbf20d8dc76b334a"), "id" : "3", "name" : "hy3", "age" : "20" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334b"), "id" : "2", "name" : "hy4", "age" : "666" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334c"), "id" : "2", "name" : "hy5", "age" : "666" }
{ "_id" : ObjectId("64da414bcbf20d8dc76b334d"), "id" : "7", "name" : "hy7", "age" : 120 }

2、恢复集合test

 语法: mongoimport -d dbName -c tableName -h hostName:port -u userName -p Password  backupDirectory/jsonFile.json

删除集合test

> db.test.drop()
true
> use hy
switched to db hy
> show tables
> 

还原集合test

##还原
[root@localhost hy]# mongoimport -d hy -c test /opt/test-back.json
2023-08-15T10:02:27.858+0800	connected to: mongodb://localhost/
2023-08-15T10:02:27.861+0800	6 document(s) imported successfully. 0 document(s) failed to import.
##查看
> show tables
> show tables
test
> db.test.find()
{ "_id" : ObjectId("64da3428cbf20d8dc76b3349"), "id" : "2", "name" : "hy2", "age" : "666" }
{ "_id" : ObjectId("64da3428cbf20d8dc76b334a"), "id" : "3", "name" : "hy3", "age" : "20" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334b"), "id" : "2", "name" : "hy4", "age" : "666" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334c"), "id" : "2", "name" : "hy5", "age" : "666" }
{ "_id" : ObjectId("64da414bcbf20d8dc76b334d"), "id" : "7", "name" : "hy7", "age" : 120 }
{ "_id" : ObjectId("64da337fcbf20d8dc76b3348"), "id" : "99", "name" : "hy1", "age" : "88" }
> 

除此之外表还可以导入到其它的库,创建一个新库yes,把集合test导入

##创建库
> show dbs
admin   0.000GB
config  0.000GB
hy      0.000GB
local   0.000GB
> use yes
switched to db yes
> db.createCollection('hy')
{ "ok" : 1 }
> show dbs
admin   0.000GB
config  0.000GB
hy      0.000GB
local   0.000GB
yes     0.000GB
> show tables
hy
> 
##把集合test导入yes
[root@localhost hy]# mongoimport -d yes -c test /opt/test-back.json
2023-08-15T10:06:57.990+0800	connected to: mongodb://localhost/
2023-08-15T10:06:57.993+0800	6 document(s) imported successfully. 0 document(s) failed to import.
##验证
> show tables
hy
test
> db.test.find()
{ "_id" : ObjectId("64da3428cbf20d8dc76b3349"), "id" : "2", "name" : "hy2", "age" : "666" }
{ "_id" : ObjectId("64da3428cbf20d8dc76b334a"), "id" : "3", "name" : "hy3", "age" : "20" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334b"), "id" : "2", "name" : "hy4", "age" : "666" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334c"), "id" : "2", "name" : "hy5", "age" : "666" }
{ "_id" : ObjectId("64da414bcbf20d8dc76b334d"), "id" : "7", "name" : "hy7", "age" : 120 }
{ "_id" : ObjectId("64da337fcbf20d8dc76b3348"), "id" : "99", "name" : "hy1", "age" : "88" }

总结

1、在进行增删改查这些操作时有些名命令是有大小写区分的请注意

2、若要递增改变一个数值,那么在插入时要赋予属性

3、注意([{:}])括号

4、在本备份与还原时要注意备份库与集合命令的区分

5、勤加练习

你可能感兴趣的:(数据库,运维,linux,MongoDB)