主頁 > 軟體設計 > MongoDB用戶權限和增刪改查的操作方法以及常用關鍵字整理

MongoDB用戶權限和增刪改查的操作方法以及常用關鍵字整理

2021-01-27 13:15:49 軟體設計

前言

這篇文章整理了一下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

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more