0402自學web後端之——MongoDB安裝、基本概念與基本操作

安裝

  • 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(內置角色):

  1. 數據庫用戶角色:read、readWrite;
  2. 數據庫管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集羣管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  4. 備份恢復角色:backup、restore;
  5. 所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超級用戶角色: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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章