<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          MongoDB,入門(mén)看這一篇足矣!

          共 11799字,需瀏覽 24分鐘

           ·

          2022-10-15 15:30


          一、介紹

          在介紹 MongoDB 之前,我先介紹一下業(yè)務(wù)開(kāi)發(fā)的時(shí)候遇到的痛點(diǎn),以便大家對(duì)它有一個(gè)更加清晰的認(rèn)識(shí)!

          最近在用數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的時(shí)候發(fā)現(xiàn)這么一個(gè)坑,例如從消息隊(duì)列中監(jiān)聽(tīng)消息的時(shí)候,原來(lái)的做法是將監(jiān)聽(tīng)的消息json數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù),以便好對(duì)異常消息數(shù)據(jù)進(jìn)行追溯,消息內(nèi)容使用text類(lèi)型存儲(chǔ),起初因?yàn)閿?shù)據(jù)內(nèi)容很短,沒(méi)啥毛病,但是當(dāng)隨著業(yè)務(wù)的擴(kuò)展,收到的消息內(nèi)容越來(lái)越長(zhǎng),最后發(fā)現(xiàn)數(shù)據(jù)庫(kù)中的text字段類(lèi)型無(wú)法很好的支持查詢(xún),于是在這個(gè)時(shí)候,就開(kāi)始考慮采用更加合適的數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)這種消息數(shù)據(jù)!

          在經(jīng)過(guò)一番討論之后,對(duì)于這種 json 類(lèi)型的消息數(shù)據(jù)的存儲(chǔ),大家一致認(rèn)為采用 MongoDB 是最佳的選擇!

          據(jù)官方介紹,MongoDB 是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富、最像關(guān)系數(shù)據(jù)庫(kù)的一款高性能的 NoSQL 數(shù)據(jù)庫(kù)。

          MongoDB 將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成。

          其中的文檔類(lèi)似于 JSON 對(duì)象。字段值可以包含其他文檔、數(shù)組及文檔數(shù)組,數(shù)據(jù)結(jié)構(gòu)的支持非常靈活!

          的確,在使用的過(guò)程當(dāng)中,正如所介紹的,數(shù)據(jù)的存儲(chǔ)和查詢(xún),性能極快,而且很好的滿(mǎn)足我們的需求!

          話(huà)不多說(shuō),下面我們就一起來(lái)了解一下,這款數(shù)據(jù)庫(kù)應(yīng)該如何使用!

          二、環(huán)境配置

          在學(xué)習(xí)它之前,我們需要先搭建好環(huán)境,MongoDB 的安裝也非常簡(jiǎn)單!

          2.1、Windows 平臺(tái)

          如果你是 Windows 平臺(tái),MongoDB 提供了可用于 32 位和 64 位系統(tǒng)的預(yù)編譯二進(jìn)制,安裝基本是傻瓜式的操作,登錄 MongoDB 官網(wǎng)并且下載安裝包,然后一步一步的操作即可!

          2.2、Linux 平臺(tái)

          生產(chǎn)環(huán)境基本都是 Linux 平臺(tái),為了和生產(chǎn)保持一致,小編采用的服務(wù)器是CentOS7,安裝過(guò)程也比較簡(jiǎn)單!

          • 創(chuàng)建資源文件
          sudo vim /etc/yum.repos.d/mongodb-org-4.0.repo
          • 編輯內(nèi)容如下
          [mongodb-org-4.0]
          name=MongoDB Repository
          baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
          gpgcheck=1
          enabled=1
          gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
          • 運(yùn)行以下命令安裝 mongodb
          sudo yum install -y mongodb-org
          • 安裝完成之后,配置mongod.conf允許遠(yuǎn)程連接
          #編輯mongod.conf
          vim /etc/mongod.conf
          #將net:bindIp: 127.0.0.1 改為 0.0.0.0
          net:
             bindIp:0.0.0.0
          • 最后啟動(dòng)服務(wù)
          #開(kāi)啟服務(wù)
          systemctl start mongod

          #其他服務(wù)
          #關(guān)閉服務(wù)
          systemctl stop mongod

          #重啟服務(wù)
          systemctl restart mongod

          #開(kāi)機(jī)自啟
          systemctl enable mongod

          至此,環(huán)境配置已經(jīng)完成!

          三、數(shù)據(jù)庫(kù)操作

          MongoDB 的數(shù)據(jù)操作,是開(kāi)發(fā)人員接觸最頻繁的部分,第一次使用的時(shí)候,你會(huì)發(fā)現(xiàn)它和我們傳統(tǒng)使用的 sql 腳本命令完全不同,但是又類(lèi)似,下面我們就一起來(lái)深入的了解下!

          3.1、進(jìn)入 MongoDB

          進(jìn)入 MongoDB 服務(wù)很簡(jiǎn)單,輸入如下命令即可進(jìn)入!

          mongo

          例如,在CentOS里面輸入命令之后,進(jìn)入的服務(wù)界面如下:

          3.2、創(chuàng)建數(shù)據(jù)庫(kù)

          MongoDB 創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)法格式如下:

          use DATABASE_NAME

          如果數(shù)據(jù)庫(kù)不存在,則創(chuàng)建數(shù)據(jù)庫(kù),否則切換到指定數(shù)據(jù)庫(kù)。

          輸入如下命令,可以查詢(xún)數(shù)據(jù)庫(kù)列表

          #查詢(xún)數(shù)據(jù)庫(kù)列表
          show dbs

          #命令輸出結(jié)果:
          admin
          config
          local

          可以看到,當(dāng)前 MongoDB 有三個(gè)數(shù)據(jù)庫(kù)!

          輸入如下命令,可以切換到admin數(shù)據(jù)庫(kù)

          use admin

          輸入db命令,還可以查詢(xún)當(dāng)前數(shù)據(jù)庫(kù)

          db

          3.3、創(chuàng)建用戶(hù)

          默認(rèn)的情況下,是沒(méi)有用戶(hù)的,也無(wú)法操作數(shù)據(jù)庫(kù),因此我們需要?jiǎng)?chuàng)建一個(gè)用戶(hù),同時(shí)給他分配權(quán)限!

          3.3.1、創(chuàng)建一個(gè)管理員用戶(hù)

          創(chuàng)建一個(gè)用戶(hù)、密碼都是admin的用戶(hù),同時(shí)給這個(gè)用戶(hù)分配userAdminAnyDatabase角色,指定的數(shù)據(jù)庫(kù)為admin!

          #創(chuàng)建一個(gè)admin用戶(hù)
          db.createUser(
          {
            user: "admin",
            pwd"admin",
            roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
          })

          其中字段含義如下:

          • user:用戶(hù)的名字;
          • pwd:用戶(hù)的密碼;
          • roles:指定用戶(hù)的角色,可以用一個(gè)空數(shù)組給新用戶(hù)設(shè)定空角色。
          • roles 中的 role:指定角色。
          • roles 中的 db:指定的數(shù)據(jù)庫(kù),例如上面中的角色userAdminAnyDatabase,只在 admin 數(shù)據(jù)庫(kù)中可用。

          角色在 MongoDB 中,代表著某個(gè)用戶(hù)是否有權(quán)限訪問(wèn)數(shù)據(jù)庫(kù)或者操作數(shù)據(jù)庫(kù),理解這點(diǎn)非常重要!

          MongoDB 角色定義如下:

          角色類(lèi)型名稱(chēng)描述
          admin數(shù)據(jù)庫(kù)角色readAnyDatabase只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶(hù)所有數(shù)據(jù)庫(kù)的讀權(quán)限
          admin數(shù)據(jù)庫(kù)角色readWriteAnyDatabase只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶(hù)所有數(shù)據(jù)庫(kù)的讀寫(xiě)權(quán)限
          admin數(shù)據(jù)庫(kù)角色userAdminAnyDatabase只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶(hù)所有數(shù)據(jù)庫(kù)的userAdmin權(quán)限
          admin數(shù)據(jù)庫(kù)角色dbAdminAnyDatabase只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶(hù)所有數(shù)據(jù)庫(kù)的dbAdmin權(quán)限
          admin數(shù)據(jù)庫(kù)角色clusterAdmin只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶(hù)所有分片和復(fù)制集相關(guān)函數(shù)的管理權(quán)限
          admin數(shù)據(jù)庫(kù)角色root只在admin數(shù)據(jù)庫(kù)中可用,超級(jí)賬號(hào),超級(jí)權(quán)限
          數(shù)據(jù)庫(kù)管理角色dbAdmin允許用戶(hù)在指定數(shù)據(jù)庫(kù)中執(zhí)行管理函數(shù),如索引創(chuàng)建、刪除,查看統(tǒng)計(jì)或訪問(wèn)system.profile
          數(shù)據(jù)庫(kù)管理角色userAdmin允許用戶(hù)向system.users集合寫(xiě)入,可以在指定數(shù)據(jù)庫(kù)里創(chuàng)建、刪除和管理用戶(hù)
          數(shù)據(jù)庫(kù)用戶(hù)角色read允許用戶(hù)讀取指定數(shù)據(jù)庫(kù)
          數(shù)據(jù)庫(kù)用戶(hù)角色readWrite允許用戶(hù)讀寫(xiě)指定數(shù)據(jù)庫(kù)
          3.3.2、創(chuàng)建一個(gè)不受訪問(wèn)限制的超級(jí)用戶(hù)

          如果你想創(chuàng)建一個(gè)不受訪問(wèn)限制的超級(jí)用戶(hù),賦予root角色即可!

          #創(chuàng)建超級(jí)用戶(hù)
          db.createUser(
              {
                  user:"root",
                  pwd:"root",
                  roles:["root"]
              }
          )
          3.3.3、創(chuàng)建一個(gè)業(yè)務(wù)數(shù)據(jù)庫(kù)普通用戶(hù)

          如果你想創(chuàng)建一個(gè)業(yè)務(wù)數(shù)據(jù)庫(kù)普通用戶(hù),例如只能訪問(wèn)test_db數(shù)據(jù)庫(kù),并且只負(fù)責(zé)數(shù)據(jù)的増查改刪。

          # 創(chuàng)建或者切換數(shù)據(jù)庫(kù)到test_db
          use test_db

          # 創(chuàng)建一個(gè)test用戶(hù),并且只能訪問(wèn)test_db,對(duì)表只有讀寫(xiě)權(quán)限
          db.createUser(
          {
            user: "test",
            pwd"test",
            roles: [ { role: "readWrite", db: "test_db" } ]
          })
          3.3.4、驗(yàn)證用戶(hù)是否可以正常登錄

          對(duì)于剛剛創(chuàng)建的用戶(hù),我們?cè)趺打?yàn)證它是否能正常登錄呢?命令也很簡(jiǎn)單!

          db.auth("test","test")

          如果返回是1表示鑒權(quán)正常!

          3.3.5、查詢(xún)當(dāng)前數(shù)據(jù)庫(kù)用戶(hù)信息

          查詢(xún)創(chuàng)建的用戶(hù),命令也很簡(jiǎn)單!

          # 查看創(chuàng)建的用戶(hù)
          show users
          3.3.6、修改用戶(hù)密碼

          有些時(shí)候,我們會(huì)忘記密碼,可通過(guò)如下方式進(jìn)行修改!

          #修改用戶(hù)密碼
          db.changeUserPassword("username""xxxxx")
          3.3.7、刪除用戶(hù)

          如果某個(gè)用戶(hù)需要停用,可通過(guò)如下方式進(jìn)行刪除

          #切換指定數(shù)據(jù)庫(kù)
          use test_db

          #刪除用戶(hù)
          db.dropUser('test')
          3.3.8、刪除數(shù)據(jù)庫(kù)

          如果某個(gè)數(shù)據(jù)庫(kù)需要停用,可通過(guò)如下方式進(jìn)行刪除(只有超級(jí)管理員有權(quán)限刪除)

          #切換指定數(shù)據(jù)庫(kù)
          use test_db

          #刪除數(shù)據(jù)庫(kù)
          db.dropDatabase()

          3.4、創(chuàng)建集合

          MongoDB 并無(wú)這個(gè)概念,而對(duì)應(yīng)的定義叫:集合,我們?cè)陉P(guān)系型數(shù)據(jù)庫(kù)中看到的表數(shù)據(jù),在 MongoDB 中被定義為:文檔,MongoDB 也被很多人成為文檔數(shù)據(jù)庫(kù)!

          在關(guān)系型數(shù)據(jù)庫(kù)中,表數(shù)據(jù)是一行一行的存儲(chǔ),但是在 MongoDB 中,可能不是這樣,如果你存儲(chǔ)的 json 非常復(fù)雜,嵌套很深,那么在 MongoDB 中存儲(chǔ)的行數(shù),可能非常深,存儲(chǔ)的時(shí)候類(lèi)似我們?cè)陧?yè)面看到的父子表結(jié)構(gòu)!

          3.4.1、創(chuàng)建一個(gè)集合

          MongoDB 中使用 createCollection() 方法來(lái)創(chuàng)建集合。

          語(yǔ)法格式:

          db.createCollection(name, options)

          參數(shù)說(shuō)明:

          • name: 要?jiǎng)?chuàng)建的集合名稱(chēng)
          • options: 可選參數(shù), 指定有關(guān)內(nèi)存大小及索引的選項(xiàng)

          例如,在 test_db 數(shù)據(jù)庫(kù)中創(chuàng)建 tb_user 集合:

          # 切換到test_db數(shù)據(jù)庫(kù)
          use test_db

          # 創(chuàng)建 tb_user 集合
          db.createCollection("tb_user")

          #輸出結(jié)果
          "ok" : 1 }

          如果要查看已有的集合,可以使用show collections命令!

          show collections

          下面是帶有幾個(gè)關(guān)鍵參數(shù)的createCollection()的用法,下面命令表示:創(chuàng)建固定集合tb_user,整個(gè)集合空間大小6142800KB, 文檔最大個(gè)數(shù)為10000 個(gè)

          db.createCollection("tb_user", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )

          在 MongoDB 中,很多時(shí)候不需要手動(dòng)創(chuàng)建集合。當(dāng)你插入一個(gè)文檔時(shí),MongoDB 會(huì)自動(dòng)創(chuàng)建集合!

          # 向集合tb_user 插入一條文檔數(shù)據(jù)
          db.tb_user.insert({"name" : "張三"})

          #查詢(xún)集合
          show collections

          # 輸出結(jié)果
          tb_user
          3.4.2、刪除一個(gè)集合

          MongoDB 中使用 drop() 方法來(lái)刪除集合。

          語(yǔ)法格式:

          db.collection.drop()

          例如,刪除在 test_db 數(shù)據(jù)庫(kù)中 tb_user 集合:

          # 切換到test_db數(shù)據(jù)庫(kù)
          use test_db

          # 創(chuàng)建 tb_user 集合
          db.tb_user.drop()

          #輸出結(jié)果
          true

          3.4、創(chuàng)建文檔

          創(chuàng)建文檔,類(lèi)似我們?cè)陉P(guān)系型數(shù)據(jù)庫(kù)中,將數(shù)據(jù)插入到數(shù)據(jù)庫(kù),操作也很簡(jiǎn)單!

          3.4.1、插入文檔

          MongoDB 使用 insert()save() 方法向集合中插入文檔。

          語(yǔ)法如下:

          db.COLLECTION_NAME.insert(document)

          db.COLLECTION_NAME.save(document)
          • save():如果_id主鍵存在則更新數(shù)據(jù),如果不存在就插入數(shù)據(jù)。
          • insert():若插入的數(shù)據(jù)主鍵已經(jīng)存在,則會(huì)拋異常,提示主鍵重復(fù),不保存當(dāng)前數(shù)據(jù)。

          例如,在test_db數(shù)據(jù)庫(kù)的tb_user集合中,插入一條數(shù)據(jù)

          db.tb_user.insert(
          {
              name:"張三",
              age:18,
              gender:"男",
              tags: ['宅男''技術(shù)控''脫發(fā)嚴(yán)重']
          })

          如果該集合不在該數(shù)據(jù)庫(kù)中, MongoDB 會(huì)自動(dòng)創(chuàng)建該集合并插入文檔。

          查看已插入文檔,命令如下:

          #查詢(xún)tb_user集合中的數(shù)據(jù)
          db.tb_user.find()

          # 輸出結(jié)果
          "_id" : ObjectId("6022310f6b5e964b0a5916e6"), "name" : "張三""age" : 18, "gender" : "男""tags" : [ "宅男""技術(shù)控""脫發(fā)嚴(yán)重" ] }

          當(dāng)然,你還可以通過(guò)save()命令進(jìn)行插入,如果不指定_id字段 save() 方法類(lèi)似于 insert() 方法。如果指定 _id 字段,則會(huì)更新該 _id 的數(shù)據(jù)。

          例如,將張三年齡更新到30歲!

          db.tb_user.save(
          {
              _id: ObjectId("6022310f6b5e964b0a5916e6"),
              name:"張三",
              age:30,
              gender:"男",
              tags: ['宅男''技術(shù)控''脫發(fā)嚴(yán)重']
          })

          查看文檔

          db.tb_user.find()

          # 輸出結(jié)果
          "_id" : ObjectId("6022310f6b5e964b0a5916e6"), "name" : "張三""age" : 30, "gender" : "男""tags" : [ "宅男""技術(shù)控""脫發(fā)嚴(yán)重" ] }
          3.4.2、更新文檔

          MongoDB 提供了 update()save() 方法來(lái)更新集合中的文檔。

          語(yǔ)法格式如下:

          db.collection.update(
             <query>,
             <update>,
             {
               upsert: <boolean>,
               multi: <boolean>,
               writeConcern: <document>
             }
          )
          • query : update的查詢(xún)條件,類(lèi)似sql update查詢(xún)內(nèi)where后面的。
          • update : update的對(duì)象和一些更新的操作符(如inc...)等,也可以理解為sql update查詢(xún)內(nèi)set后面的
          • upsert : 可選,這個(gè)參數(shù)的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認(rèn)是false,不插入
          • multi : 可選,mongodb 默認(rèn)是false,只更新找到的第一條記錄,如果這個(gè)參數(shù)為true,就把按條件查出來(lái)多條記錄全部更新。
          • writeConcern :可選,拋出異常的級(jí)別。

          例如,將張三年齡更新到22歲!

          db.tb_user.update({'name':'張三'},{$set:{'age':22}})

          查詢(xún)已更新的數(shù)據(jù)

          db.tb_user.find()

          # 輸出結(jié)果
          "_id" : ObjectId("602235216b5e964b0a5916e8"), "name" : "張三""age" : 22, "gender" : "男""tags" : [ "宅男""技術(shù)控""脫發(fā)嚴(yán)重" ] }

          以上語(yǔ)句只會(huì)修改第一條發(fā)現(xiàn)的文檔,如果你要修改多條相同的文檔,則需要設(shè)置multi參數(shù)為true。

          db.tb_user.update({'name':'張三'},{$set:{'age':22}},{multi:true})
          3.4.3、刪除文檔

          MongoDB 中的remove()函數(shù)是用來(lái)移除集合中的數(shù)據(jù)

          語(yǔ)法格式如下:

          db.collection.remove(
             <query>,
             {
               justOne: <boolean>,
               writeConcern: <document>
             }
          )
          • query :(可選)刪除的文檔的條件。
          • justOne : (可選)如果設(shè)為 true 或 1,則只刪除一個(gè)文檔,如果不設(shè)置該參數(shù),或使用默認(rèn)值 false,則刪除所有匹配條件的文檔。
          • writeConcern :(可選)拋出異常的級(jí)別。

          例如,刪除姓名為張三的用戶(hù)

          db.tb_user.remove({'name':'張三'})

          查詢(xún)數(shù)據(jù)是否被刪除

          db.col.find()

          #結(jié)果為空
          3.4.4、查詢(xún)文檔

          MongoDB 查詢(xún)文檔使用 find() 方法。

          語(yǔ)法格式如下:

          db.collection.find(query, projection)
          • query :可選,使用查詢(xún)操作符指定查詢(xún)條件
          • projection :可選,使用投影操作符指定返回的鍵。查詢(xún)時(shí)返回文檔中所有鍵值, 只需省略該參數(shù)即可(默認(rèn)省略)。

          如果你需要以易讀的方式來(lái)讀取數(shù)據(jù),可以使用 pretty() 方法,語(yǔ)法格式如下:

          db.col.find().pretty()

          首先我們插入幾條數(shù)據(jù),插入結(jié)果如下:

          例如,查詢(xún)一個(gè)性別為的用戶(hù)信息

          #單個(gè)條件查詢(xún),類(lèi)似 sql語(yǔ)句中的 gender = '男'
          db.tb_user.find({"gender":"男"})

          查詢(xún)一個(gè)性別為,姓名為張三的用戶(hù)

          #多條件查詢(xún),類(lèi)似 sql語(yǔ)句中的 gender = '男' and name = '李四'
          db.tb_user.find({"gender":"男","name":"李四"})

          查詢(xún)一個(gè)性別為 或者 姓名為張三的用戶(hù)

          #多條件查詢(xún),類(lèi)似 sql語(yǔ)句中的 gender = '男' or name = '李四'
          db.tb_user.find({$or:[{"gender":"男"},{"name""李四"}]})

          查詢(xún)一個(gè)性別為 或者 姓名為張三,同時(shí)年齡大于30的用戶(hù)

          #多條件查詢(xún),類(lèi)似 sql語(yǔ)句中的 age > 30 and ( gender = '男' or name = '李四')
          db.tb_user.find({"age": {$gt:30}, $or:[{"gender":"男"},{"name""李四"}]})
          3.4.5、分頁(yè)查詢(xún)文檔

          如果需要分頁(yè)查詢(xún)集合數(shù)據(jù),可以使用limit()skip()函數(shù),其中limit()表示讀幾條數(shù)據(jù),skip()表示從第幾條數(shù)據(jù)開(kāi)始。

          #從集合中的第三行數(shù)據(jù)開(kāi)始,讀2條數(shù)據(jù)返回
          db.tb_user.find({}).limit(2).skip(3)
          3.4.6、文檔排序

          和關(guān)系型數(shù)據(jù)庫(kù)一樣,MongoDB 可以使用sort()方法進(jìn)行排序,通過(guò)參數(shù)指定排序的字段,并使用 1-1 來(lái)指定排序的方式,其中 1 為升序排列,而 -1 是用于降序排列。

          例如,查詢(xún)tb_user文檔,按照age進(jìn)行升序排序!

          db.tb_user.find({}).sort({"age":1})

          3.5、創(chuàng)建索引

          索引通常能夠極大的提高查詢(xún)的效率,如果沒(méi)有索引,MongoDB 在讀取數(shù)據(jù)時(shí)必須掃描集合中的每個(gè)文件并選取那些符合查詢(xún)條件的記錄。

          這種掃描全集合的查詢(xún)效率是非常低的,特別在處理大量的數(shù)據(jù)時(shí),查詢(xún)可以要花費(fèi)幾十秒甚至幾分鐘,這對(duì)網(wǎng)站的性能是非常致命的。

          3.5.1、創(chuàng)建索引

          MongoDB 使用 createIndex() 方法來(lái)創(chuàng)建索引,語(yǔ)法格式如下:

          db.collection.createIndex(keys, options)

          語(yǔ)法中 Key 值為你要?jiǎng)?chuàng)建的索引字段,1 為指定按升序創(chuàng)建索引,如果你想按降序來(lái)創(chuàng)建索引指定為 -1 即可!

          例如,給tb_user文檔中的age創(chuàng)建一個(gè)索引!

          db.tb_user.createIndex({"age":1})

          創(chuàng)建索引是一個(gè)比較耗時(shí)的動(dòng)作,我們還可以通過(guò)參數(shù)配置,在后臺(tái)創(chuàng)建索引。

          db.tb_user.createIndex({"age":1}, {background: true})

          通過(guò)在創(chuàng)建索引時(shí)加background:true的選項(xiàng),讓創(chuàng)建工作在后臺(tái)執(zhí)行!

          3.5.2、查看索引

          MongoDB 提供了getIndexes()方法,可以進(jìn)行查看索引。

          例如,查詢(xún)tb_user集合中的索引

          db.tb_user.getIndexes()
          3.5.3、刪除索引

          不在需要的索引,我們可以將其刪除。刪除索引時(shí),可以刪除集合中的某一索引,可以刪除全部索引。

          語(yǔ)法格式:

          db.COLLECTION_NAME.dropIndex("INDEX-NAME")

          例如,刪除集合tb_user集合中的age索引:

          #查詢(xún)索引
          db.tb_user.getIndexes()

          #輸出結(jié)果
          [
              {
                  "v" : 2,
                  "key" : {
                      "_id" : 1
                  },
                  "name" : "_id_",
                  "ns" : "test_db.tb_user"
              },
              {
                  "v" : 2,
                  "key" : {
                      "age" : 1
                  },
                  "name" : "age_1",
                  "ns" : "test_db.tb_user"
              }
          ]

          刪除對(duì)應(yīng)的age_1索引!

          db.tb_user.dropIndex("age_1")

          四、客戶(hù)端

          對(duì)于任何一款數(shù)據(jù)庫(kù),如果沒(méi)有可視化界面操作,在開(kāi)發(fā)的時(shí)候,可以說(shuō)極其不方便,下面推薦一款小編經(jīng)常使用的一款客戶(hù)端。

          • Robo 3T(免費(fèi)、輕量級(jí)) ,可以訪問(wèn)官網(wǎng)獲取
          • Studio 3T(全面,收費(fèi)),訪問(wèn)官網(wǎng)地址獲取

          其中小編采用的是第二款,整體的體驗(yàn)比Robo 3T要一點(diǎn),兩者功能都比較齊全!

          在使用的時(shí)候,可以根據(jù)個(gè)人喜愛(ài)進(jìn)行選擇!

          五、重要的一步

          網(wǎng)上發(fā)現(xiàn)很多 mongodb 被黑,使大家將目光投向了mongodb 的權(quán)限控制。

          其實(shí) mongodb 本身有一套完備的 RBAC 權(quán)限控制體系,這次被黑基本都是沒(méi)有遵照 mongodb 的生產(chǎn)環(huán)境部署手冊(cè)部署的結(jié)果。

          我們平時(shí)玩一玩 mongodb 習(xí)慣了不設(shè)置用戶(hù)名密碼,當(dāng)我們的數(shù)據(jù)庫(kù)放到公網(wǎng)時(shí),由于我們也沒(méi)有設(shè)置用戶(hù)名密碼,任何人都可以隨便訪問(wèn),而且由于我們沒(méi)有開(kāi)啟授權(quán)訪問(wèn),使得任何登錄到 mongodb 服務(wù)器的用戶(hù)都擁有最高權(quán)限!

          一些居心不良的人發(fā)現(xiàn),就可以把我們的數(shù)據(jù)拷走,刪除我們的數(shù)據(jù)庫(kù),從而勒索贖金!

          再次提醒各位同學(xué),別學(xué)會(huì)所有的技能,大門(mén)還一直開(kāi)著,還抱怨我方防御塔怎么一直被摧毀!

          以上文CentOS7安裝為例,修改/etc/mongod.conf,在security部分添加如下配置,開(kāi)啟授權(quán)訪問(wèn)!

          security:
              authorization: enabled

          修改完成之后,重啟 mongodb 服務(wù)

          #重啟服務(wù)
          systemctl restart mongod

          六、小結(jié)

          本文主要圍繞 MongoDB 的使用,從環(huán)境配置、數(shù)據(jù)庫(kù)使用,再到客戶(hù)端工具選用,做了簡(jiǎn)單的介紹,可能有的地方總結(jié)的不到位,歡迎各位網(wǎng)友批評(píng)指出!

          在下篇文章中,我們會(huì)詳細(xì)的介紹SpringBootMongoDB的整合實(shí)踐!

          七、參考

          1、MongoDB 官方文檔

          2、菜鳥(niǎo)教程 - mongodb


          END


          關(guān)注 Stephen,一起學(xué)習(xí),一起成長(zhǎng)。


          點(diǎn)“在看”支持下吧


          點(diǎn) 閱讀原文 可優(yōu)惠充值話(huà)費(fèi),流量,視頻會(huì)員等。

          瀏覽 38
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  婷婷性爱网 | 欧美黄色片在线观看 | 中文字幕黄色片 | 熟女一区| 日韩第九页 |