安裝
- docker方式
>>> docker pull mongo:latest
>>> docker run -itd --name mongo --restart always -p 27017:27017 mongo --auth
# 進入客戶端 admin爲數據庫名稱
>>> docker exec -it mongodb mongo admin
db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]});
基本概念
- 對比
SQL術語/概念 | MongoDB術語/概念 | 解釋/說明 |
---|---|---|
database | database | 數據庫 |
table | collection | 數據庫表/集合 |
row | document | 數據記錄行/文檔 |
column | field | 數據字段/域 |
index | index | 索引 |
table joins | 表連接,MongoDB不支持 | |
primary key | primary key | 主鍵,MongoDB自動將_id字段設置爲主鍵 |
參考:https://www.runoob.com/mongodb/mongodb-databases-documents-collections.html
- 角色
Built-In Roles(內置角色):
- 數據庫用戶角色:read、readWrite;
- 數據庫管理角色:dbAdmin、dbOwner、userAdmin;
- 集羣管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 備份恢復角色:backup、restore;
- 所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超級用戶角色:root
read:允許用戶讀取指定數據庫
readWrite:允許用戶讀寫指定數據庫
backup,retore:在進行備份、恢復時可以單獨指定的角色,在db.createUser()方法中roles裏面的db必須寫成是admin庫,要不然會 報錯
dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫裏創建、刪除和管理用戶
clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和複製集相關函數的管理權限。
readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限,
dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
root:只在admin數據庫中可用。超級賬號,超級權限
參考:https://www.crifan.com/mongodb_create_normal_gridfs_root_user_fail_error_couldnt_add_user_no_role_named_root_gridfs/
基本操作
# 進入admin數據庫shell界面
>>> docker exec -it mongodb mongo admin
# 使用admin賬號進行身份認證
>>> db.auth('admin', '123456')
1
# 創建api數據庫擁有readWrite權限的賬戶
>>> db.createUser({ user:'user',pwd:'123456',roles:[ { role:'readWrite', db: 'api'}]});
Successfully added user: {
"user" : "user",
"roles" : [
{
"role" : "readWrite",
"db" : "api"
}
]
}
# 查看集合
>>> show collections
xxxxx
>>> show tables
xxxxx
# find一條數據
>>> db.users.findOne()
{
"_id" : ObjectId("5e85aafdd96c8fec786818fc"),
"email" : "[email protected]",
"password" : "pbkdf2:sha256:150000$pkN824ob$4fecb14593f491e829c2760072d652891eb759859619eb8457fa52ca13ebb006",
"active" : false
}
# find所有數據
>>> db.users.find()
{ "_id" : ObjectId("5e85aafdd96c8fec786818fc"), "email" : "[email protected]", "password" : "pbkdf2:sha256:150000$pkN824ob$4fecb14593f491e829c2760072d652891eb759859619eb8457fa52ca13ebb006", "active" : false }
# find所有數據(格式化顯示輸出)
>>> db.test.find().pretty()
{
"_id" : ObjectId("5e85aafdd96c8fec786818fc"),
"email" : "[email protected]",
"password" : "pbkdf2:sha256:150000$pkN824ob$4fecb14593f491e829c2760072d652891eb759859619eb8457fa52ca13ebb006",
"active" : false
}
# insert一條數據
>>> db.test.insert({'test_id': 12345, 'test': '測試'})
WriteResult({ "nInserted" : 1 })
>>> db.test.findOne()
{
"_id" : ObjectId("5e8c446cf19bca7092dfbc51"),
"test_id" : 12345,
"test" : "測試"
}
# update一條數據
>>> db.test.update({'test_id': 12345}, {$set:{'test_id': 54321}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
>>> db.test.findOne()
{
"_id" : ObjectId("5e8c446cf19bca7092dfbc51"),
"test_id" : 54321,
"test" : "測試"
}
# remove一條數據
>>> db.test.remove({'test_id':54321})
WriteResult({ "nRemoved" : 1 })
MongoDB 與 RDBMS Where 語句比較
操作 | 格式 | 範例 | RDBMS中的類似語句 |
---|---|---|---|
等於 | {:} | db.col.find({“by”:“菜鳥教程”}).pretty() | where by = ‘菜鳥教程’ |
小於 | {:{$lt:}} | db.col.find({“likes”:{$lt:50}}).pretty() | where likes < 50 |
小於或等於 | {:{$lte:}} | db.col.find({“likes”:{$lte:50}}).pretty() | where likes <= 50 |
大於 | {:{$gt:}} | db.col.find({“likes”:{$gt:50}}).pretty() | where likes > 50 |
大於或等於 | {:{$gte:}} | db.col.find({“likes”:{$gte:50}}).pretty() | where likes >= 50 |
不等於 | {:{$ne:}} | db.col.find({“likes”:{$ne:50}}).pretty() | where likes != 50 |
參考:https://www.runoob.com/mongodb/mongodb-query.html
參考:https://zhuanlan.zhihu.com/p/26215701