Mongodb總結(jié)

Mongodb總結(jié)

簡介

準(zhǔn)備工作

安裝Mongodb

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

啟動服務(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 是所要創(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為所要刪除的集合的名稱
    例:
    > 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)系作者
  • 序言:七十年代末割疾,一起剝皮案震驚了整個(gè)濱河市嚎卫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宏榕,老刑警劉巖拓诸,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異担扑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)趣钱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門涌献,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人首有,你說我怎么就攤上這事燕垃。” “怎么了井联?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵卜壕,是天一觀的道長。 經(jīng)常有香客問我烙常,道長轴捎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任蚕脏,我火速辦了婚禮侦副,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘驼鞭。我一直安慰自己秦驯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布挣棕。 她就那樣靜靜地躺著译隘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪洛心。 梳的紋絲不亂的頭發(fā)上固耘,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音词身,去河邊找鬼玻驻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的璧瞬。 我是一名探鬼主播户辫,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嗤锉!你這毒婦竟也來了渔欢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤瘟忱,失蹤者是張志新(化名)和其女友劉穎奥额,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體访诱,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垫挨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了触菜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片九榔。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖涡相,靈堂內(nèi)的尸體忽然破棺而出哲泊,到底是詐尸還是另有隱情,我是刑警寧澤催蝗,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布切威,位于F島的核電站,受9級特大地震影響丙号,放射性物質(zhì)發(fā)生泄漏先朦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一犬缨、第九天 我趴在偏房一處隱蔽的房頂上張望烙无。 院中可真熱鬧,春花似錦遍尺、人聲如沸截酷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迂苛。三九已至,卻和暖如春鼓择,著一層夾襖步出監(jiān)牢的瞬間三幻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工呐能, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留念搬,地道東北人抑堡。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓朗徊,卻偏偏與公主長得像首妖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子爷恳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

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