前言
這篇文章整理了一下mongodb的基本指令和一些經常用到的用戶操作,同時我還整理了關于linux、redis、Nginx、MySQL以及zookeeper等絕大多數后端開發所要用到的一些常用命令
如果需要的話可以進群973961276免費領取,除了操作命令整理合集之外還有1000多道一線大廠面試題和超多的學習書籍以及視頻資料,都可以免費給到有需要的朋友,
用戶權限
基本指令
mongo的操作指令一般是要在指定的一個庫下面進行的,命令 引數 資料庫等大小寫敏感,
進入mongo命令:mongo 剛安裝完mongodb是沒有開啟權限,沒有用戶的,
切換資料庫:user admin 切換到amin資料庫
顯示當前資料庫用戶:show users
顯示資料庫:show dbs
推出momgodb:exit
剛安裝完mongodb后,需要創建一個root權限的用戶,然后修改組態檔開啟權限驗證,然后重啟mongodb服務,
[root@wdq ~]# mongo
MongoDB shell version v4.2.2
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("4fea1f3b-05f9-4634-870a-ced1e95eaceb") }
MongoDB server version: 4.2.2
> use admin
switched to db admin
> db.createUser({user:"root",pwd:"root",roles:[ {role:"root", db:"admin" } ]})
創建用戶
> db.auth("root","wdq123")
1
1表示成功
驗證用戶 相當于登錄
用戶操作
創建用戶
db.createUser({user:"root",pwd:"root",roles:[ {role:"root", db:"admin" } ]})
user:用戶名
pwd:用戶密碼
roles:用戶權限,是一個資料(權限都要指定到庫)
role:具體的一個權限
db:具體的一個庫
Vi創建用戶
比如說有一個CRM的庫,我要給他創建用戶,先切到CRM庫上,在創建用戶,
修改密碼
> use ERP
switched to db ERP
> db.createUser({user:"crm",pwd:"crm",roles:[ {role:"dbOwner", db:"ERP" } ]})
Successfully added user: {
"user" : "crm",
"roles" : [
{
"role" : "dbOwner",
"db" : "ERP"
}
]
}
> db.changeUserPassword("crm","crm1")
> db.auth("crm","crm1")
1
> db.updateUser("crm",{pwd:"crm2"})
2019-12-25T23:16:50.575+0800 E QUERY [js] uncaught exception: Error: Updating user failed: too many users are authenticated :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.updateUser@src/mongo/shell/db.js:1420:11
@(shell):1:1
>
修改用戶密碼changeUserPassword
最后報錯,因為db.auth多次,需要推出 exit,
> exit
bye
[root@wdq ~]# mongo
MongoDB shell version v4.2.2
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("3030ac06-bae6-41d6-b39a-d652af4d7c33") }
MongoDB server version: 4.2.2
> use admin
switched to db admin
> db.auth("root","wdq123")
1
> use ERP
switched to db ERP
> db.updateUser("crm",{pwd:"crm2"})
>
修改用戶密碼db.updateUser
洗掉用戶
> db.dropUser("erp")
true
洗掉用戶
修改用戶權限
方法一
> db.grantRolesToUser("crm", [{role:"readWrite", db:"ERP"},{role:"read", db:"CacheERP"}])
> use CacheERP
switched to db CacheERP
> show users
>
新增權限
> show users
{
"_id" : "ERP.crm",
"userId" : UUID("f970ce79-8725-4f0e-904c-a162b847a041"),
"user" : "crm",
"db" : "ERP",
"roles" : [
{
"role" : "readWrite",
"db" : "ERP"
},
{
"role" : "read",
"db" : "CacheERP"
},
{
"role" : "dbOwner",
"db" : "ERP"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
查看當前權限
看到加入了兩個權限
> use ERP
switched to db ERP
> show users
{
"_id" : "ERP.crm",
"userId" : UUID("f970ce79-8725-4f0e-904c-a162b847a041"),
"user" : "crm",
"db" : "ERP",
"roles" : [
{
"role" : "readWrite",
"db" : "ERP"
},
{
"role" : "read",
"db" : "CacheERP"
},
{
"role" : "dbOwner",
"db" : "ERP"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
> db.revokeRolesFromUser("crm",[{role:"readWrite", db:"ERP"}])
> show users
{
"_id" : "ERP.crm",
"userId" : UUID("f970ce79-8725-4f0e-904c-a162b847a041"),
"user" : "crm",
"db" : "ERP",
"roles" : [
{
"role" : "read",
"db" : "CacheERP"
},
{
"role" : "dbOwner",
"db" : "ERP"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
>
洗掉權限
方法二
db.updateUser 完全把用戶權限清洗為當前設定的值, 慎用
> show users
{
"_id" : "ERP.crm",
"userId" : UUID("f970ce79-8725-4f0e-904c-a162b847a041"),
"user" : "crm",
"db" : "ERP",
"roles" : [
{
"role" : "read",
"db" : "CacheERP"
},
{
"role" : "dbOwner",
"db" : "ERP"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
> db.updateUser("crm",{roles:[ {role:"readWrite",db:"ERP"} ]})
> show users
{
"_id" : "ERP.crm",
"userId" : UUID("f970ce79-8725-4f0e-904c-a162b847a041"),
"user" : "crm",
"db" : "ERP",
"roles" : [
{
"role" : "readWrite",
"db" : "ERP"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
>
修改權限
基本增刪查改
客戶端
Studio 3T,破解方法可以百度,
上面可以寫基礎sql,可以查看官方檔案,

資料庫
1、添加
> use mytestdb
switched to db mytestdb
添加資料庫
2、洗掉
> use mytestdb switched to db mytestdb
> db.dropDatabase() { "ok" : 1 } >
洗掉資料庫
集合(表)
1、創建集合
> use mytestdb
switched to db mytestdb
> db.createCollection("col1")
{ "ok" : 1 }
> db.createCollection("col2")
{ "ok" : 1 }
>
> db.col3.insert({"name":"wdq"})
WriteResult({ "nInserted" : 1 })
>
通過插入一條資料創建集合
2、洗掉集合
> show collections
col1
col2
col3
> db.col3.drop()
true
> show collections
col1
col2
>
洗掉集合
檔案(一行資料)
1、插入檔案
> db.col1.insert({name:'wdq',age:16})
WriteResult({ "nInserted" : 1 })
>
插入檔案到集合
如果該集合不在該資料庫中, MongoDB 會自動創建該集合并插入檔案
> db.col1.insertOne({name:'zdd',age:16})
{
"acknowledged" : true,
"insertedId" : ObjectId("5e04d6551e1033670e11ccdd")
}
>
> db.col1.insertMany([{name:'www',age:10},{name:'zzz',age:11}])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("5e04d6b11e1033670e11ccde"),
ObjectId("5e04d6b11e1033670e11ccdf")
]
}
>
插入檔案到集合(單個 多個)
2、更新檔案
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
更新格式
query : update的查詢條件,類似sql update查詢內where后面的,
update : update的物件和一些更新的運算子(如$,$inc...)等,也可以理解為sql update查詢內set后面的
upsert : 可選,這個引數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認是false,不插入,
multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,如果這個引數為true,就把按條件查出來多條記錄全部更新, writeConcern :可選,拋出例外的級別,
引數說明
db.col1.update({name:"wdq"},{$set:{age:100}},{upsert:true,multi:true})
簡單更新
db.col1.save({_id:ObjectId("5e04d5af1e1033670e11ccdc"),name:"wdqwdq",age:110})
根據ID替換現有檔案
只更新第一條記錄:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
只添加第一條:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
全部添加進去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
只更新第一條記錄:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
View Code
3、洗掉檔案
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
洗掉格式
query :(可選)洗掉的檔案的條件,
justOne : (可選)如果設為 true 或 1,則只洗掉一個檔案,如果不設定該引數,或使用默認值 false,則洗掉所有匹配條件的檔案,
writeConcern :(可選)拋出例外的級別
引數說明
remove() 方法 并不會真正釋放空間,
需要繼續執行 db.repairDatabase() 來回收磁盤空間,
> db.repairDatabase()
或者
> db.runCommand({ repairDatabase: 1 })
remove() 方法已經過時了,現在官方推薦使用 deleteOne() 和 deleteMany() 方法
如洗掉集合下全部檔案:
db.inventory.deleteMany({})
洗掉 status 等于 A 的全部檔案:
db.inventory.deleteMany({ status : "A" })
洗掉 status 等于 D 的一個檔案:
db.inventory.deleteOne( { status: "D" } )
delete
集合 查詢
db.collection.find(query, projection)
query :可選,使用查詢運算子指定查詢條件
projection :可選,使用投影運算子指定回傳的鍵,查詢時回傳檔案中所有鍵值, 只需省略該引數即可(默認省略),
查詢格式
| 操作 | 格式 | 范例 | RDBMS中的類似陳述句 |
|---|---|---|---|
| 等于(equal) | {<key>:<value>} | db.col.find({"by":"菜鳥教程"}).pretty() | where by = '菜鳥教程' |
| 小于(less than) | {<key>:{$lt:<value>}} | db.col.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
| 小于或等于(lt equal) | {<key>:{$lte:<value>}} | db.col.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
| 大于(greater than) | {<key>:{$gt:<value>}} | db.col.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
| 大于或等于(gt equal) | {<key>:{$gte:<value>}} | db.col.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
| 不等于(not equal) | {<key>:{$ne:<value>}} | db.col.find({"likes":{$ne:50}}).pretty() | where likes != 50 |
db.col.find({key1:value1, key2:value2}).pretty()
AND
>db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
OR
| 關鍵字 | 說明 |
|---|---|
| $or | 或關系 |
| $nor | 或關系取反 |
| $gt | 大于 |
| $gte | 大于等于 |
| $lt | 小于 |
| $lte | 小于等于 |
| $ne | 不等于 |
| $in | 在多個值范圍內 |
| $nin | 不在多個值范圍內 |
| $all | 匹配陣列中多個值 |
| $regex | 正則,用于模糊查詢 |
| $size | 匹配陣列大小 |
| $maxDistance | 范圍查詢,距離(基于LBS) |
| $mod | 取模運算 |
| $near | 鄰域查詢,查詢附近的位置(基于LBS) |
| $exists | 欄位是否存在 |
| $elemMatch | 匹配內陣列內的元素 |
| $within | 范圍查詢(基于LBS) |
| $box | 范圍查詢,矩形范圍 |
| $center | 范圍查詢,圓形范圍 |
| $centerSphere | 范圍查詢,球形范圍 |
| $slice | 查詢欄位集合中的元素(比如從第幾個之后,第N到第M個元素) |
正則:
--{"name":{"$regex":"正大"}}
db.getCollection("subscribe_test").find({$or:[{"name":{"$regex":"正大"}},{"content":{"$regex":"正大"}}],"update_time":{$gte:1,$lte:2000000000},info_type:"00"})
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/253143.html
標籤:其他
上一篇:談談我對協程的理解
下一篇:XML簡介與Dom4j決議XML
