官網www.mongodb.com, 目前最新版3.4
c++編寫,基于分布式的,屬于nosql的一種
在nosql中是最像關系型資料庫的
mongodb 将資料存儲為一個文檔,資料結構由鍵值(key=>value)對組成。mongodb 文檔類似于 json 對象。字段值可以包含其他文檔、數組及文檔數組。
關于json http://www.w3school.com.cn/json/index.asp
因為基于分布式,是以很容易擴充
mongodb和關系型資料庫對比
關系型資料庫資料結構
mongodb資料結構
epel自帶的mongodb版本為2.6,我們需要安裝3.4版本
官方安裝文檔https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
cd /etc/yum.repos.d/
vim mongodb-org-3.4.repo//加入如下内容
[mongodb-org-3.4]
name=mongodb repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
yum list |grep mongodb //可以看到mongodb相關的rpm包
yum install -y mongodb-org
systemctl start mongod //啟動服務
在本機可以直接運作指令mongo進入到mongodb shell中
如果mongodb監聽端口并不是預設的27017,則在連接配接的時候需要加--port 選項,例如
mongo --port 27018
連接配接遠端mongodb,需要加--host,例如
mongo --host 127.0.0.1
如果設定了驗證,則在連接配接的時候需要帶使用者名和密碼
mongo -uusername -ppasswd --authenticationdatabase db //這個和mysql挺像
use admin//需要切換到admin庫
db.createuser( { user: "admin", customdata: {description: "superuser"}, pwd: "admin122", roles: [ { role: "root", db: "admin" } ] } )
user指定使用者,customdata為說明字段,可以省略,pwd為密碼,roles指定使用者的角色,db指定庫名
use admin //切換到admin庫
db.system.users.find() //列出所有使用者,需要切換到admin庫
show users //檢視目前庫下所有的使用者
db.dropuser('admin') //删除使用者
若要使用者生效,還需要編輯啟動腳本vim /usr/lib/systemd/system/mongod.service,在options=後面增--auth
重新開機服務systemctl restart mongod
mongo -u "admin" -p "admin122" --authenticationdatabase "admin"
use db1
db.createuser( { user: "test1", pwd: "123aaa", roles: [ { role: "readwrite", db: "db1" }, {role: "read", db: "db2" } ] } )
test1使用者對db1庫讀寫,對db2庫隻讀。
之是以先use db1,表示使用者在 db1 庫中建立,就一定要db1庫驗證身份,即使用者的資訊跟随随資料庫。比如上述 test1雖然有 db2 庫的讀取權限,但是一定要先在db1庫進行身份驗證,直接通路會提示驗證失敗。
use db2
db.auth("test1", "123aaa")
mongodb使用者角色
read:允許使用者讀取指定資料庫
readwrite:允許使用者讀寫指定資料庫
dbadmin:允許使用者在指定資料庫中執行管理函數,如索引建立、删除,檢視統計或通路system.profile
useradmin:允許使用者向system.users集合寫入,可以找指定資料庫裡建立、删除和管理使用者
clusteradmin:隻在admin資料庫中可用,賦予使用者所有分片和複制集相關函數的管理權限。
readanydatabase:隻在admin資料庫中可用,賦予使用者所有資料庫的讀權限
readwriteanydatabase:隻在admin資料庫中可用,賦予使用者所有資料庫的讀寫權限
useradminanydatabase:隻在admin資料庫中可用,賦予使用者所有資料庫的useradmin權限
dbadminanydatabase:隻在admin資料庫中可用,賦予使用者所有資料庫的dbadmin權限。
root:隻在admin資料庫中可用。超級賬号,超級權限
mongodb庫管理
db.version() //檢視版本
use userdb //如果庫存在就切換,不存在就建立
show dbs //檢視庫,此時userdb并沒有出現,這是因為該庫是空的,還沒有任何集合,隻需要建立一個集合就能看到了
db.createcollection('clo1') //建立集合clo1,在目前庫下面建立
db.dropdatabase() //删除目前庫,要想删除某個庫,必須切換到那個庫下
db.stats() //檢視目前庫的資訊
db.serverstatus() //檢視mongodb伺服器的狀态