進入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
Linux各版本鏡像源: https://repo.mongodb.org/, 下面以CentOS系統爲例:
# 更新yum包管理 $ yum -y update
查看當前系統版本
$ 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配置文件路徑:/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
通常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
經過上面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配置
可設置mongod隨機自啓動
$ systemctl enable mongod.service
也能夠經過手動建立軟鏈實現
$ ln -s /usr/lib/systemd/system/mongod.service /etc/systemd/system/multi-user.target.wants/
不建議用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
$ sudo mongod -f /etc/mongod.conf --shutdown
$ tail -n30 /var/log/mongodb/mongod.log
# 進入mongo $ mongo # 顯示當前數據庫,默認定位test數據庫 > db; # 顯示全部數據庫 > show dbs; # 切換/建立數據庫 > use xxx; # 刪除數據庫 > db.dropDatabase(); # 修復數據庫 > db.repairDatabase(); # 查看當前db的連接機器地址 > db.getMongo(); # 退出mongo > exit;
# 顯示全部集合名 > show tables; # 或 > db.getCollectionNames(); # 建立集合 > db.createCollection('users', {size: 1024, max: 1000}); # 最大1M,1000條 # 刪除集合 > db.users.drop();
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); # 可設單條
對於web應用來講,最經常使用的用戶類型有:bash
用戶類型 | 角色 | 管理用戶 | 讀寫數據 | 身份受權庫 |
---|---|---|---|---|
數據庫用戶 | read/readWrite | 無 | 指定庫 | 指定庫/admin |
全部數據庫讀寫權限 | readWriteAnyDatabase | 無 | 任意庫 | admin |
用戶管理員 | userAdmin | 指定庫 | 無 | 指定庫/admin |
全部數據庫管理員 | userAdminAnyDatabase | 任意庫 | 無 | admin |
超級帳號 | root | 任意庫 | 任意庫 | admin |
# 顯示全部用戶 > 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('用戶名');
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:'業務庫'}]});
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']});
若是mongoDB未開啓認證模式,全部用戶的權限與root同樣,任意操做。
$ mongo # 自定義host和端口 $ mongo --host 主機 --port 端口
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
mongo://主機:端口/數據庫名
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=身份認證所用庫
也適用於copy遠程數據庫到本地
$ mongodump --host 主機 --port 端口 --username 用戶 --password "密碼" --authenticationDatabase "受權庫" --db 目標數據庫 --out 存放目錄
若本地數據庫以非認證模式運行,恢復到本地可簡單的以下:
$ mongorestore 存放目錄
恢復遠程認證數據庫:
$ mongorestore --host 主機 --port 端口 --username 用戶 --password "密碼" --authenticationDatabase "受權庫" 存放目錄