Mongodb總結(jié)

Mongodb總結(jié)

簡介

準(zhǔn)備工作

安裝Mongodb

windows版從官網(wǎng)下載安裝文件一路OK即可

啟動(dòng)服務(wù)

連接服務(wù)

命令窗口執(zhí)行 mongo host:portmongo host:port/dbNamemongo host:port/dbName -u user -p pwd 即可

數(shù)據(jù)庫操作

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

  • 語法:use DATABASE_NAME,如果數(shù)據(jù)庫不存在,則創(chuàng)建數(shù)據(jù)庫,否則切換到指定數(shù)據(jù)庫, show dbs 命令可查看所有數(shù)據(jù)庫。幾乎對數(shù)據(jù)庫的所有操作都要先使用 use dbName 來切換數(shù)據(jù)庫后再進(jìn)行操作
    例:
    > use test
    switched to db test
    > db
    test
    > show dbs
    admin  0.000GB
    local  0.000GB
    test   0.000GB
    

刪除數(shù)據(jù)庫

  • 語法:db.dropDatabase(),先使用use命令切換到待刪除數(shù)據(jù)庫后使用該命令可刪除相應(yīng)數(shù)據(jù)庫。
    例:
    > use test
    switched to db test
    > db
    test
    > db.dropDatabase()
    > show dbs
    admin  0.000GB
    local  0.000GB
    

創(chuàng)建集合

  • 語法:db.createCollection(name, options),在該命令中,name 是所要?jiǎng)?chuàng)建的集合名稱。options 是一個(gè)用來指定集合配置的文檔。
  • show collections命令可以查看該數(shù)據(jù)庫下所有的集合。
    例:
    > use MyBlog
    switched to db MyBlog
    > db.createCollection('newcol')
    { "ok" : 1 }
    > show collections
    blog
    newcol
    users
    

刪除集合

  • 語法:db.collectionName.drop(),其中collectionName為所要?jiǎng)h除的集合的名稱
    例:
    > db.newcol.drop()
    true
    > show collections
    blog
    users
    

查詢文檔

  • 語法:db.collectionName.find([param])[.pretty()],其中collectionName為要查詢的集合名稱,param為查詢條件,如果不設(shè)置param,即 db.collectionName.find() 用來查詢出全部文檔,而pertty()方法指返回格式化的數(shù)據(jù)。
    例:
    >db.blog.find().pretty()
    /* 1 */
    {
    "_id" : ObjectId("59e017c497c02061aee8288a"),
    "title" : "first blog",
    "content" : "this is content for first blog",
    "author" : "ever",
    "createTime" : ISODate("2017-10-13T01:32:52.861Z")
    }
    
    /* 2 */
    {
    "_id" : ObjectId("59e0180197c02061aee8288b"),
    "title" : "second blog",
    "content" : "this is content for second blog",
    "author" : "john",
    "createTime" : ISODate("2017-10-13T01:33:53.297Z")
    }
    
  • 查詢條件設(shè)置:
    操作 格式 范例 RDBMS中的類似語句
    等于 {<key>:<value>} db.mycol.find({"by":"tutorials point"}).pretty() where by = 'tutorials point'
    小于 {<key>:{$lt:<value>}} db.mycol.find({"likes":{$lt:50}}).pretty() where likes < 50
    小于等于 {<key>:{$lte:<value>}} db.mycol.find({"likes":{$lte:50}}).pretty() where likes <= 50
    大于 {<key>:{$gt:<value>}} db.mycol.find({"likes":{$gt:50}}).pretty() where likes > 50
    大于等于 {<key>:{$gte:<value>}} db.mycol.find({"likes":{$gte:50}}).pretty() where likes >= 50
    不等于 {<key>:{$ne:<value>}} db.mycol.find({"likes":{$ne:50}}).pretty() where likes != 50
    例:只查詢author為ever的文檔
    > db.blog.find({"author":"ever"}).pretty()
    
  • and條件設(shè)置:
    在 find() 方法中,如果傳入多個(gè)鍵,并用逗號(,)分隔它們,那么 MongoDB 會把它看成是 AND 條件。AND 條件的基本語法格式為:
    db.collectionName.find({key1:value1, key2:value2}).pretty()

    db.collectionName.find({$and:[{key1:value1},{key2:value2}]})
    例:查詢author為"ever"并且title為"second blog"的所有文檔
    > db.blog.find({"author":"ever","title":"second blog"})
    或
    > db.blog.find({$and:[{"author":"ever"},{"title":"second blog"}]})
    
  • or條件設(shè)置:
    語法:db.mycol.find({$or:[{key1: value1}, {key2:value2}]}).pretty(),類似于and的語法

插入文檔

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

  • 語法:db.COLLECTION_NAME.insert(document),同樣的要先使用use切換到相應(yīng)數(shù)據(jù)庫。如果不指定 _id 字段 save() 方法類似于 insert() 方法。如果指定 _id 字段,則會更新該 _id 的數(shù)據(jù)。
    例:
    > db.person.insert({"name":"ever","age":18})
    Inserted 1 record(s) in 41ms
    > db.person.find()
    /* 1 */
    {
        "_id" : ObjectId("59de30103a2fba4b96f0ccb9"),
        "name" : "ever",
        "age" : 18.0
        }
    

更新文檔

MongoDB 中的 update() 與 save() 方法都能用于更新集合中的文檔。update() 方法更新已有文檔中的值,而 save() 方法則是用傳入該方法的文檔來替換已有文檔。

  • save():傳入新的完整的文檔來覆蓋現(xiàn)有文檔,需要包含_id字段
    例:
    >db.blog.save({"_id":"ObjectId(5983548781331adf45ec5)","title":"firstblog"})
    
  • update():db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)
    例:將author為"jack"并且title為"third blog"的文檔的author字段更新為"ever"
    > db.blog.update({author:"jack",title:"third blog"},{$set:{author:"ever"}})
    Updated 1 existing record(s) in 98ms
    

刪除文檔

  • 語法:db.COLLECTION_NAME.remove(DELLETION_CRITTERIA[,justone]),其中justone參數(shù)為可選,表示是否只刪除一條文檔,1表示是,不賦值默認(rèn)為否。(注:database和collection的刪除都是用drop方法,并且無參數(shù),文檔刪除用remove方法且有參數(shù))。
    例:新增一條文檔,并刪除之
    > db.blog.insert({title:"seventh blog",content:"this is content for seventh blog",author:"sophia",createTime:new Date()})
    Inserted 1 record(s) in 86ms
    > db.blog.remove({author:"sophia",title:"seventh blog"})
    Removed 1 record(s) in 87ms
    

權(quán)限管理

用戶管理

以上所有操作都不需要用戶認(rèn)證,任何人都可以連接并操作數(shù)據(jù)庫,顯然是很不安全的,需要為數(shù)據(jù)庫添加用戶并進(jìn)行用戶權(quán)限控制,基本操作步驟:創(chuàng)建管理員賬號->登錄管理員賬號->創(chuàng)建普通用戶->登錄普通用戶。具體如下:

  1. 創(chuàng)建管理員賬號:
    MongoDB初始是沒有管理員或默認(rèn)賬號的,需要自行添加,過程如下:
    • 連接服務(wù)器:mongo host/port/db
      > mongo localhost:27017
      MongoDB shell version v3.4.9
      connecting to: mongodb://127.0.0.1:27017
      MongoDB server version: 3.4.9
      
    • 切換到admin庫(因?yàn)樗杏脩粜畔⒈4嬖赼dmin庫)并使用 db.createUser 方法創(chuàng)建管理員賬號:
      > use admin
      switched to db admin
      > db.createUser(
          {
          user: "admin",
          pwd: "123456",
          roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
          })
      Successfully added user: {
          "user" : "admin",
          "roles" : [
                  {
                      "role" : "userAdminAnyDatabase",
                      "db" : "admin"
                  }
              ]
          }
      > show users
      {
          "_id" : "admin.admin",
          "user" : "admin",
          "db" : "admin",
          "roles" : [
              {
                      "role" : "userAdminAnyDatabase",
                      "db" : "admin"
              }
          ]
      }
      
    • 開啟權(quán)限認(rèn)證
      在 c:\data\db\conf\mongodb.conf 配置文件中添加一行: auth=true 即可開啟權(quán)限認(rèn)證,重新連接數(shù)據(jù)庫測試,如下提示沒有認(rèn)證則表示開啟認(rèn)證成功
      > show dbs
      2017-10-16T10:01:22.637+0800 E QUERY    [thread1] Error: listDatabases failed:{
      "ok" : 0,
      "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
      "code" : 13,
      "codeName" : "Unauthorized"
      } :
      
  2. 登錄管理員賬戶:
    切換到admin數(shù)據(jù)庫并使用 db.auth(user,pwd) 方法登錄,返回1表示登錄成功
    > db.auth('admin','123456')
    1
    
  3. 創(chuàng)建普通用戶:
    切換到待創(chuàng)建普通用戶的數(shù)據(jù)庫并使用 db.createUser 方法創(chuàng)建普通賬號:
    > db.createUser({user:"rascalquan",pwd:"123456",roles:[{role:"readWrite", db: "mydb"}]})
    
  4. 登錄普通用戶:
    使用 db.auth(user,pwd) 登錄數(shù)據(jù)庫
    > db.auth('rascalquan','123456')
    1
    

至此,可以使用rascalquan賬號操作mydb數(shù)據(jù)庫了。

修改用戶密碼

  • 語法:db.changeUserPassword('user','newPwd');

角色管理

MongoDB內(nèi)置以下角色:

  • Read:允許用戶讀取指定數(shù)據(jù)庫
  • readWrite:允許用戶讀寫指定數(shù)據(jù)庫
  • dbAdmin:允許用戶在指定數(shù)據(jù)庫中執(zhí)行管理函數(shù),如索引創(chuàng)建、刪除,查看統(tǒng)計(jì)或訪問system.profile
  • userAdmin:允許用戶向system.users集合寫入,可以找指定數(shù)據(jù)庫里創(chuàng)建、刪除和管理用戶
  • clusterAdmin:只在admin數(shù)據(jù)庫中可用,賦予用戶所有分片和復(fù)制集相關(guān)函數(shù)的管理權(quán)限。
  • readAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的讀權(quán)限
  • readWriteAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的讀寫權(quán)限
  • userAdminAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的userAdmin權(quán)限
  • dbAdminAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的dbAdmin權(quán)限。
  • root:只在admin數(shù)據(jù)庫中可用。超級賬號,超級權(quán)限
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,291評論 2 89
  • 安裝 mongodb服務(wù): sudo service mongod/mongodb start sudo serv...
    末版車閱讀 647評論 0 0
  • 漲姿勢 1.MySQL與Mongo中的一些概念對比: 基本語法規(guī)則 1.DDL語法(操作數(shù)據(jù)庫及表的結(jié)構(gòu)) ---...
    Cinque_Peng閱讀 476評論 0 0
  • 學(xué)習(xí)《MongoDB 權(quán)威指南·第2版》的筆記,結(jié)合 MongoDB 官方最新文檔(v3.6),簡單記錄一些概念、...
    小魚愛小蝦閱讀 6,206評論 0 5
  • 版本3.6.x 配置 windows建議安裝service方式,省的每次通過命令行啟動(dòng)server端。 對比mys...
    飛凡的陀螺閱讀 560評論 0 0

友情鏈接更多精彩內(nèi)容