一、搭建MongoDB

# 配置Yum源仓库
cat > /etc/yum.repos.d/mongodb-org.repo << EOF
[mngodb-org]
name=MongoDB Repository
baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/4.0/x86_64/
gpgcheck=0
enabled=1
EOF

# 清除元数据缓存并且加载元数据缓存
yum clean all
yum makecache

# 安装MongoDB
yum -y install mongodb-org

# 编辑配置文件,将监听端口修改为0.0.0.0监听所有
vim /etc/mongod.conf
  10   path: /var/log/mongodb/mongod.log  # 服务日志存放位置
  14   dbPath: /var/lib/mongo			  # 数据存储位置
  24   pidFilePath: /var/run/mongodb/mongod.pid		# 进程PID文件存放位置
  27 # network interfaces
  28 net:
  29   port: 27017
  30   bindIp: 127.0.0.1  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.

# 启动MongoDB服务
systemctl start mongod

# 查看MongoDB服务是否正常启用
lsof -i :27017
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mongod  30171 mongod   11u  IPv4 446377      0t0  TCP *:27017 (LISTEN)

# 进入Mongodb
mongo

# 查看所有数据库
show dbs

# MongoDB多实例
cp -pf /etc/mongod.conf /etc/mongod2.conf 
vim /etc/mongod2.conf 

# 修改日志文件存放路径 #修改数据存储目录  #修改端口号防止冲突
10   path: /var/log/mongodb/mongod2.log
14   dbPath: /var/lib/mongo2
29   port: 27018

touch /var/log/mongodb/mongod2.log
mkdir -p /var/lib/mongo2

# 启动新实例,指定配置文件
mongod -f /etc/mongod2.conf 

# 检测Mongodb端口
netstat -anlp | grep mongod
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      30171/mongod        
tcp        0      0 0.0.0.0:27018           0.0.0.0:*               LISTEN      30236/mongod        

# 进入新实例
mongo --port 27018

二、MongoDB数据库基本操作

# 查看数据库版本
db.version()

# 查看所有数据库
show dbs

# 创建数据库,mongoDB数据库创建直接使用use即可,如果不在库内创建集合,退出时自动删除该库
use school

# 创建集合(表),是json格式,以键值对方式存储
db.createCollection('集合名')

# 查看集合
show tables  或  show collections

# 查看集合数据
db.集合名.find()		# 条件可写在()内,不写默认查看全部,一页最多显示20条,按it继续查看

# 在集合中插入数据,json格式,键值对,字符串加双引号
db.abc.insert({"id":1,"name":"zhangsan","hobby":"talk"})
db.abc.find()

# 循环插入,+号可以连接字符串,直接将+号后面的内容转换为字符串衔接
for(i=2;i<=100;i++) db.abc.insert({"id":i,"name":"zhangsan"+i,"hobby":"talk"+i})
db.abc.find()

# 横向查看指定条件数据信息
db.abc.find({"id":1})

# 竖向查看指定条件数据信息
db.abc.findOne({"id":1})

# 查看每个字段的数据类型,例:可以为第一条数据加一个别名
a=db.abc.findOne({"id":1})
typeof(a.id)
typeof(a.name)
typeof(a.hobby)
-------------------------
> typeof(a.id)
number
> typeof(a.name)
string
> typeof(a.hobby)
string

# 更改指定条件数据,将name修改成tomcat
db.abc.update({"id":10},{$set:{"name":"tomcat"}})
-------------------------
> db.abc.find({"id":10})
{ "_id" : ObjectId("60707e5cc0f72922431300e6"), "id" : 10, "name" : "tomcat", "hobby" : "talk10" }
-------------------------

# 删除指定数据
db.abc.remove({"id":1})

# 删除集合
例:先创建一个新的集合,我们之前的abc后面要用
db.createCollection('qwe')
show tables

db.qwe.drop()

# 删除数据库,首先进这个要删的数据库,然后db.dropDatabase()
use myschool
db.createCollection('wawa')
show dbs
db.dropDatabase()
show dbs

三、数据库导出导入、备份恢复操作

===============
导出 mongoexport
===============

# 命令行模式下,-d指定数据库,-c指定数据表,-o表示输出
mongoexport -d school -c abc -o /opt/lic.json

cat /opt/lic.json	# 如果你发现这个文件是空的话,那么就需要你指定一下端口--port 默认27017的库优先级高,所以指定端口不要忘

===============
导入 mongoimport
===============
# 导入的库和表都可以不存在
mongoimport -d wajueji -c qwe --file /opt/lic.json

# 验证一下是否导入成功
mongo
show dbs
use wajueji
db.qwe.find()

===============
指定条件     导出
===============
# -q指定条件,eq等于、ne不等于、gt大于、lt小于、ge大于等于、le小于等于,都可以使用
mongoexport  -d school -c abc -q '{"id":{"$eq":10}}' -o /opt/10.json

cat /opt/10.json

==============
    数据备份
==============
mkdir /backup
# 使用mongodump -d指定要保存的库,同理-c指定要保存的库中表
mongodump -d school -o /backup

ls /backup/school
保存的类型:bson

=============
   恢复还原
=============
mongorestore -d lic --dir=/backup/school

# 验证
mongo
> use lic
switched to db lic
> show tables
abc
ceshi
> db.abc.find()

四、复制数据库

mongo

# 将school数据库复制为share数据库
db.copyDatabase("school","share")

show tables

五、克隆集合

例:
exit

# 再创建两个实例,后面要用到

# 创建多实例的数据目录
mkdir -p /data/mongodb/mongodb{13,4}

# 日志文件目录
mkdir -p /data/mongodb/logs

# 创建日志文件,并赋权777
cd /data/mongodb/logs
touch mongodb{3,4}.log
chmod 777 *

# 修改多实例配置文件
cd /etc

cp -p mongod.conf mongod3.conf
cp -p mongod.conf mongod4.conf

vim mongod3.conf
10   path: /data/mongodb/logs/mongodb3.log
14   dbPath: /data/mongodb/mongodb3
29   port: 27019

vim mongod4.conf
10   path: /data/mongodb/logs/mongodb4.log
14   dbPath: /data/mongodb/mongodb4
29   port: 27020

# 启动这两个实例(开启mongod服务)
mongod -f /etc/mongod3.conf
mongod -f /etc/mongod4.conf

# 查看端口
netstat -natp | grep mongod

tcp        0      0 0.0.0.0:27019           0.0.0.0:*               LISTEN      33082/mongod        
tcp        0      0 0.0.0.0:27020           0.0.0.0:*               LISTEN      33693/mongod        
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      1122/mongod         
tcp        0      0 0.0.0.0:27018           0.0.0.0:*               LISTEN      2378/mongod  


----------------------


# 开始克隆
#这里进入27019
mongo --port 27019

# 克隆来自192.168.184.10:27018服务中的school库中的abc表
db.runCommand({"cloneCollection":"school.abc","from":"192.168.184.10:27018"})

# 验证
show dbs
use school
show tables
db.abc.find()

六、创建管理用户

mongoDB中自带一个admin库

在这个库中创建

例:
use admin

# 创建用户,用户名:root,密码:123123,身份:管理员
db.createUser({"user":"root","pwd":"123123","roles":["root"]})

show tables
# 使用db.auth("root","123123")进行验证,成功返回1,失败返回0

# 使用带用户登录MongoDB
mongo -u root -p 123123

MongoDB用户权限分配详细请查看

七、进程管理

db.currentOp()
"opid" : 26345,

# 其中一大段中,关注opid,如果想结束这个进程就,db.killOp(26345)即可
# 但是关闭这个进程不代表退出数据库,相当于将当前进程初始化释放,关了之后又开启了,相当于一个优化操作