MongoDB數據庫的應用詳解

1、Win下安裝數據庫

進入mongo官網,選擇相應的msi版本下載,安裝時默認勾選安裝MongoD服務和修改一些數據庫配置,如已有數據庫鏈接工具Robo 3T,可取消默認勾選的compass安裝。web

若啓動服務報mp錯誤,可修改binmongod.cfg,註釋最後一行mp

安裝後若是須要修改配置/服務或手動運行,能夠參考以下:mongodb

一、命令行運行
能夠經過命令行運行,也能夠經過指定配置運行,以安裝在D:MongoDB爲例
# 單行配置
> D:\MongoDB\bin\mongod.exe --dbpath D:\MongoDB\data --logappend

# 指定配置文件
> D:\MongoDB\bin\mongod.exe --config "D:\MongoDB\bin\mongod.cfg"
二、服務方式運行
經過安裝和運行服務,可讓mongoDB之後臺靜默的方式運行。

安裝/移除服務:shell

# 添加到windows服務
> D:\MongoDB\bin\mongod.exe --config "D:\MongoDB\bin\mongod.cfg" --install

# 移除服務(以管理員身份運行cmd)
> D:\MongoDB\bin\mongod.exe --remove

啓動/關閉服務:數據庫

> net start MongoDB
> net stop MongoDB

2、Linux安裝數據庫

Linux各版本鏡像源: https://repo.mongodb.org/, 下面以CentOS系統爲例:
# 更新yum包管理
$ yum -y update
一、安裝Mongodb
查看當前系統版本
$ cat /etc/redhat-release
打開 https://repo.mongodb.org/yum/... ,選擇適合本身系統的mongo版本,而後編輯Mongodb安裝源,下面以3.6爲例:
$ sudo vi /etc/yum.repos.d/mongodb-org-3.6.repo
編輯內容(根據本身的mongo版本替換下面的3.6字樣):
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
安裝:
$ yum install mongodb-org
二、修改Mongo配置
mongo配置文件路徑:/etc/mongod.conf,但若是用mongod命令直接運行(非service運行),此時若不用-f指定配置文件,mongo會使用內在配置,dbpath也默認存放在/data/db下
$ vi /etc/mongod.conf

#--------------------------------------------------------

# 可修改數據庫存放位置
storage:
  dbPath: /var/lib/mongodb

# 若要支持遠程鏈接,需將默認的127.0.0.1改成:
net:
  port: 27017
  bindIp: 0.0.0.0

# 若需數據庫權限認證,開啓下面配置:
security:
    authorization: enabled

若遠程鏈接工具Robo 3T仍是不能鏈接,需在防火牆增長端口:windows

$ sudo /sbin/iptables -I INPUT -p tcp --dport 27017 -j ACCEPT

3、Linux運行數據庫

一、service服務管理
1.)配置
通常service服務配置不用修改,若有須要,可查看:
$ sudo vi /lib/systemd/system/mongod.service
配置以下:
[Unit]
Description=MongoDB Database Server
After=network.target
 
[Service]
Type=forking
User=mongodb
Group=mongodb

ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/mongod --config /etc/mongod.conf --shutdown

PIDFile=/var/run/mongodb/mongod.pid
 
[Install]
WantedBy=multi-user.target
服務配置如有變更,須要重載service服務
$ systemctl daemon-reload
2.)運行
經過上面mongod.service配置能夠看到,service方式默認以mongodb用戶,使用的是默認配置/etc/mongod.conf
# 啓動
$ service mongod start

# 或用systemctl管理
$ systemctl start mongod.service

# 重啓
$ service mongod restart

# 關閉
$ service mongod stop
若啓動出現timeout錯誤時,可查看service裏的pid與config裏的pid是否相同,不一致時需修改mongod.service配置
3.)隨系統啓動
可設置mongod隨機自啓動
$ systemctl enable mongod.service
也能夠經過手動建立軟鏈實現
$ ln -s /usr/lib/systemd/system/mongod.service /etc/systemd/system/multi-user.target.wants/
二、手動管理
1.)啓動
不建議用root用戶啓動mongod服務,可經過-u指定用戶啓動
# 手動指定配置文件
$ sudo mongod -f /etc/mongod.conf --fork # --fork後臺運行

# 指定用戶(mongodb)
$ sudo -u mongodb mongod -f /etc/mongod.conf --fork

# 開啓權限認證模式
$ sudo mongod -f /etc/mongod.conf --auth --fork
2.)關閉
$ sudo mongod -f /etc/mongod.conf --shutdown
三、查看日誌
$ tail -n30 /var/log/mongodb/mongod.log

4、操做數據庫

一、數據管理
1.) 數據庫操做
# 進入mongo
$ mongo

# 顯示當前數據庫,默認定位test數據庫
> db;

# 顯示全部數據庫
> show dbs;

# 切換/建立數據庫
> use xxx;

# 刪除數據庫
> db.dropDatabase();

# 修復數據庫
> db.repairDatabase();

# 查看當前db的連接機器地址
> db.getMongo(); 

# 退出mongo
> exit;
2.) 集合(表)操做
# 顯示全部集合名
> show tables;
# 或
> db.getCollectionNames();

# 建立集合
> db.createCollection('users', {size: 1024, max: 1000}); # 最大1M,1000條

# 刪除集合
> db.users.drop();
3.) 文檔(記錄)操做
3.2版本以後,對CRUD操做分別新增了單條和批量指令
# 查詢記錄
---------------------------------------------------------
> db.users.findOne();  # 查詢集合裏第一條
> db.users.find();  # 查詢集合裏所有

# 根據條件查詢
> db.users.findOne({age: 8});
> db.users.find({name: /汪/});  # 正則模糊查詢

# 返回指定字段
> db.users.find({name: /汪/}, {age: 1}) # 只返回age和默認_id, 爲0相反,除了指定的其它終返回

# 新增記錄
---------------------------------------------------------
> db.users.insertOne({name: 'wang', age: 8});  # 主鍵已存在會報錯
> db.users.insertMany([{},{}]);  # 新增多條
> db.users.save({name: 'wang', age: 8});  # 主鍵已存在會替換

# 修改記錄
---------------------------------------------------------
> db.users.updateOne({name: 'wang'}, {$set: {sex: 'male'}}); 
> db.users.updateMany({name: 'wang'}, {$set: {sex: 'male'}});
# 通用寫法(後面兩個參數:第一個表示找不到則新建一條,第二個表示更新多條)
> db.users.update({name: 'wang'}, {$set: {sex: 'male'}}, false, true);

# 刪除記錄
---------------------------------------------------------
> db.users.deleteOne({age: 8}); 
> db.users.deleteMany({age: 8}); 
# 通用寫法
> db.users.remove({age: 8});  # 默認多條
> db.users.remove({age: 8}, true);  # 可設單條
二、用戶管理
1.) 用戶類型

對於web應用來講,最經常使用的用戶類型有:bash

用戶類型 角色 管理用戶 讀寫數據 身份受權庫
數據庫用戶 read/readWrite 指定庫 指定庫/admin
全部數據庫讀寫權限 readWriteAnyDatabase 任意庫 admin
用戶管理員 userAdmin 指定庫 指定庫/admin
全部數據庫管理員 userAdminAnyDatabase 任意庫 admin
超級帳號 root 任意庫 任意庫 admin
2.) 經常使用用戶指令
# 顯示全部用戶
> show users;

# 新建用戶
> db.createUser({user:'用戶名',pwd:'密碼',roles:[{role:'角色',db:'庫'}]});

# 若當前數據庫與目標庫相同,可簡寫:
> db.createUser({user:'用戶名',pwd:'密碼',roles:['角色']});

# 追加用戶權限
> db.grantRolesToUser('用戶名',[{role:'角色',db:'庫'}]);

# 修改用戶權限
> db.updateUser('用戶名',{roles:['角色1','角色2']});

# 更新密碼
> db.changeUserPassword('用戶名','密碼');
# 或
> db.updateUser('用戶名',{pwd:'密碼'});

# 刪除用戶
> db.dropUser('用戶名');
3.) 管理用戶建立
root、*AnyDatabase角色用戶、cluster集羣等用戶只能在admin庫下建立
> use admin;

# 超級管理員
> db.createUser({user:'root',pwd:'密碼',roles:['root']});

# user管理員帳號
> db.createUser({user:'用戶名',pwd:'密碼',roles:['userAdminAnyDatabase']});

# 任意庫讀寫帳號
> db.createUser({user:'用戶名',pwd:'密碼',roles:['readWriteAnyDatabase']};

# 普通讀寫用戶(能夠在admin庫下建立,但認證時也需在admin庫)
> db.createUser({user:'用戶名',pwd:'密碼',roles:[{role:'readWrite',db:'業務庫'}]});
4.) 普通用戶建立
mongoDB的權限是跟隨庫的,用戶在哪一個庫下建立的,則需在哪一個庫進行auth認證,若是認證庫和讀寫目標庫一致,則鏈接時authSource參數可省略(見第四節:鏈接數據庫)
> use xxx;
> db.createUser({user:'用戶名',pwd:'密碼',roles:['readWrite']);
若是提示SCRAM-SHA-256 requires undigested passwords錯誤,須要加mechanisms,以下:
> db.createUser({user:'用戶名',pwd:'密碼',roles:['readWrite'],mechanisms: ['SCRAM-SHA-1']});

5、鏈接數據庫

一、shell方式鏈接:
1.)普通登陸
若是mongoDB未開啓認證模式,全部用戶的權限與root同樣,任意操做。
$ mongo

# 自定義host和端口
$ mongo --host 主機 --port 端口
2.)認證登陸
mongoDB的權限是跟隨庫的,普通用戶在哪一個庫新建受權,就須要在哪一個庫進行auth驗證
$ mongo --host 主機 --port 端口
> use 認證數據庫;
> db.auth('用戶名', '密碼');
也能夠登陸時一併受權認證:
$ mongo --host 主機 --port 端口 -u '用戶名' -p '密碼' --authenticationDatabase '身份認證所用庫'
root和*AnyDatabase角色的權限只能在admin數據庫裏認證,如:
$ mongo --host 主機 --port 端口 -u root -p 123456 --authenticationDatabase admin
二、URI方式鏈接:
1.)未認證數據庫
mongo://主機:端口/數據庫名
2.)認證數據庫

a.)普通數據用戶app

若當前用戶認證的數據庫與要操做的數據庫相同,鏈接方式以下:
mongo://用戶名:密碼@主機:端口/數據庫名
若不一樣,則需添加authSource,例如:在admin庫裏認證了,角色db倒是xxx
mongo://用戶名:密碼@主機:端口/xxx?authSource=admin

b.)root和全部數據庫用戶tcp

若鏈接用戶是root、*AnyDatabase角色、cluster集羣的認證庫都是admin
mongo://用戶名:密碼@主機:端口/數據庫名?authSource=admin

c.)認證機制工具

mongoDB支持多種認證機制, 經常使用的有'MONGODB-CR' 和 'SCRAM-SHA-1' 兩種,官方推薦 'SCRAM-SHA-1',此時不須要帶在URI裏,但若是是'MONGODB-CR'類型需加添加在URI上。
mongo://用戶名:密碼@主機:端口/數據庫?authMechanism=認證機制&authSource=身份認證所用庫

6、備份/恢復數據庫

一、備份數據庫:
也適用於copy遠程數據庫到本地
$ mongodump --host 主機 --port 端口 --username 用戶 --password "密碼" --authenticationDatabase "受權庫" --db 目標數據庫 --out 存放目錄
二、恢復數據庫:
若本地數據庫以非認證模式運行,恢復到本地可簡單的以下:
$ mongorestore 存放目錄
恢復遠程認證數據庫:
$ mongorestore --host 主機 --port 端口 --username 用戶 --password "密碼" --authenticationDatabase "受權庫" 存放目錄
相關文章
相關標籤/搜索