MongoDB的安裝及學習

正常安裝

  • 下載軟件补鼻, 在MongoDB官網(wǎng) 下載安裝包mongodb-win32-x86_64-2008plus-ssl-3.4.3-signed
  • 下載完成后開始安裝,我修改了安裝位置雅任,放在了目錄“C:\mongodb”下面
  • 一路next安裝完成风范。接下來是最有問題的設(shè)置MongoDB的服務(wù)。
  • 在目錄“C:\mongodb”下創(chuàng)建data目錄和logs目錄沪么,并在logs目錄下創(chuàng)建文件mongodb.log
  • 在目錄“C:\mongodb”下創(chuàng)建mongodb.conf硼婿,并填入配置信息:
dbpath=C:\mongodb\data
logpath=C:\mongodb\logs\mongo.log
logappend=true 
journal=true
quiet=true 
port=27017
  • 啟動cmd界面,并執(zhí)行以下命令:
cd C:\mongodb\bin
mongod --config "C:\mongodb\mongo.conf" --logpath "C:\mongodb\logs\mongo.log" --install --serviceName "MongoDB"
mongod.exe --remove --serviceName "MongoDB" #如果需要移除這個服務(wù)的話
  • 瀏覽器訪問http://127.0.0.1:27017即可看到以下界面


權(quán)限配置

MonogoDB默認是無需權(quán)限認證即可進行CRUD操作的禽车,但是為了保證MongoDB的使用尤其是商業(yè)使用加酵,MongoDB應(yīng)該要求是做權(quán)限配置。
關(guān)于權(quán)限哭当,需要理解:

  1. MongoDB是沒有默認管理員賬號猪腕,所以要先添加管理員賬號,再開啟權(quán)限認證钦勘。
  2. 切換到admin數(shù)據(jù)庫陋葡,添加的賬號才是管理員賬號。
  3. 用戶只能在用戶所在數(shù)據(jù)庫登錄彻采,包括管理員賬號腐缤。
  4. 管理員可以管理所有數(shù)據(jù)庫捌归,但是不能直接管理其他數(shù)據(jù)庫,要先在admin數(shù)據(jù)庫認證后才可以岭粤。

MongoDB有默認的角色參考官方文檔惜索,也可以自定義角色,默認的角色包括:

  • Read:允許用戶讀取指定數(shù)據(jù)庫
  • readWrite:允許用戶讀寫指定數(shù)據(jù)庫
  • dbAdmin:允許用戶在指定數(shù)據(jù)庫中執(zhí)行管理函數(shù)剃浇,如索引創(chuàng)建巾兆、刪除,查看統(tǒng)計或訪問system.profile
  • userAdmin:允許用戶向system.users集合寫入虎囚,可以找指定數(shù)據(jù)庫里創(chuàng)建角塑、刪除和管理用戶
  • clusterAdmin:只在admin數(shù)據(jù)庫中可用,賦予用戶所有分片和復(fù)制集相關(guān)函數(shù)的管理權(quán)限淘讥。
  • readAnyDatabase:賦予用戶所有數(shù)據(jù)庫的讀權(quán)限
  • readWriteAnyDatabase:賦予用戶所有數(shù)據(jù)庫的讀寫權(quán)限
  • userAdminAnyDatabase:賦予用戶所有數(shù)據(jù)庫的userAdmin權(quán)限
  • dbAdminAnyDatabase:賦予用戶所有數(shù)據(jù)庫的dbAdmin權(quán)限圃伶。
  • root:超級賬號,超級權(quán)限
  • __system權(quán)限 蒲列,用于分布式環(huán)境的權(quán)限認證窒朋,MongoDB assigns this role to user objects that represent cluster members, such as replica set members and mongos instances. The role entitles its holder to take any action against any object in the database.Do not assign this role to user objects representing applications or human administrators, other than in exceptional circumstances.If you need access to all actions on all resources, for example to run applyOps commands, do not assign this role. Instead, create a user-defined role that grants anyAction on anyResource and ensure that only the users who need access to these operations have this access.

上述的配置完成后,可以按照下面的操作進行:

  • 查看admin庫
C:\Users\kejun.he>mongo
> use admin
switched to db admin
> show collections
system.version
  • 添加超級權(quán)限用戶sa,root用戶和admin用戶
> db.createUser(
 {
 user:"sa",
 pwd:"root",
 roles:["root"]
 })
> db.createUser(
 {
 user:"root",
 pwd:"root",
 roles:["clusterAdmin", "readWriteAnyDatabase", "dbAdminAnyDatabase", "userAdminAnyDatabase"]
 })
> db.createUser(
 {
 user:"admin",
 pwd:"admin",
 roles:[{role:"dbAdminAnyDatabase",db:"admin"}]
 })
  • 在我們之前配置的mongo.conf文件中增加這一句蝗岖,并重啟mongoDB服務(wù)
auth=true
========================
net stop mongoDB
net start mongoDB

我們再重新登錄侥猩,發(fā)現(xiàn)需要認證的配置生效了,這時候需要通過認證登錄:

C:\Users\kejun.he>mongo
MongoDB shell version v3.4.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.3
> show dbs
2017-04-25T13:04:34.435+0800 E QUERY    [thread1] Error: listDatabases failed:{
        "ok" : 0,
        "errmsg" : "not authorized on admin to execute command { listDatabases:
1.0 }",
        "code" : 13,
        "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:761:19
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1

在上面的代碼中剪侮,我們可看到需要檢查admin的權(quán)限拭宁,use admin之后不能直接查詢洛退,通過權(quán)限認證之后才能查看admin數(shù)據(jù)庫下的表瓣俯。
* 繼續(xù)增加普通用戶,方便用戶訪問特定的數(shù)據(jù)庫

> use admin
> db.auth("admin","admin")
> use upwords
switched to db upwords
> db.createUser({
user:"up",
pwd:"up",
roles:[{role:"readWrite",db:"upwords"},{role:"dbAdmin",db:"upwords"}]
})

Successfully added user: {
        "user" : "up",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "upwords"
                },
                {
                        "role" : "dbAdmin",
                        "db" : "upwords"
                }
        ]
}
> use upwords
switched to db upwords
> db.auth("up","up")
1
> show collections
abc
test

顯示添加成功兵怯。

概念

  • NoSQL(NoSQL = Not Only SQL )彩匕,意即"不僅僅是SQL"。

  • RDBMS vs NoSQL
    RDBMS

    • 高度組織化結(jié)構(gòu)化數(shù)據(jù)
    • 結(jié)構(gòu)化查詢語言(SQL) (SQL)
    • 數(shù)據(jù)和關(guān)系都存儲在單獨的表中媒区。
    • 數(shù)據(jù)操縱語言驼仪,數(shù)據(jù)定義語言
    • 嚴格的一致性
    • 基礎(chǔ)事務(wù)

    NoSQL

    • 代表著不僅僅是SQL
    • 沒有聲明性查詢語言
    • 沒有預(yù)定義的模式
    • 鍵 - 值對存儲,列存儲袜漩,文檔存儲绪爸,圖形數(shù)據(jù)庫
    • 最終一致性,而非ACID屬性
    • 非結(jié)構(gòu)化和不可預(yù)知的數(shù)據(jù)
    • CAP定理
    • 高性能宙攻,高可用性和可伸縮性
  • NoSQL的優(yōu)點/缺點
    優(yōu)點:

    • 高可擴展性
    • 分布式計算
    • 低成本
    • 架構(gòu)的靈活性奠货,半結(jié)構(gòu)化數(shù)據(jù)
    • 沒有復(fù)雜的關(guān)系

    缺點:

    • 沒有標準化
    • 有限的查詢功能(到目前為止)
    • 最終一致是不直觀的程序
  • MongoDB 是由C++語言編寫的,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)座掘。MongoDB 將數(shù)據(jù)存儲為一個文檔递惋,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對組成柔滔。MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔萍虽,數(shù)組及文檔數(shù)組睛廊。主要特點包括:

    • MongoDB的提供了一個面向文檔存儲,操作起來比較簡單和容易杉编。
    • 你可以在MongoDB記錄中設(shè)置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實現(xiàn)更快的排序超全。
    • Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記王财,可輕易查詢文檔中內(nèi)嵌的對象及數(shù)組卵迂。
    • MongoDb 使用update()命令可以實現(xiàn)替換完成的文檔(數(shù)據(jù))或者一些指定的數(shù)據(jù)字段 。
    • Mongodb中的Map/reduce主要是用來對數(shù)據(jù)進行批量處理和聚合操作绒净。
    • Map和Reduce见咒。Map函數(shù)調(diào)用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數(shù)進行處理挂疆。
    • Map函數(shù)和Reduce函數(shù)是使用Javascript編寫的改览,并可以通過db.runCommand或mapreduce命令來執(zhí)行MapReduce操作。
    • GridFS是MongoDB中的一個內(nèi)置功能缤言,可以用于存放大量小文件宝当。
    • MongoDB允許在服務(wù)端執(zhí)行腳本,可以用Javascript編寫某個函數(shù)胆萧,直接在服務(wù)端執(zhí)行庆揩,也可以把函數(shù)的定義存儲在服務(wù)端,下次直接調(diào)用即可跌穗。
    • MongoDB支持各種編程語言:RUBY订晌,PYTHON,JAVA蚌吸,C++锈拨,PHP,C#等多種語言羹唠。
  • MongoDB中奕枢,數(shù)據(jù)庫db=database,數(shù)據(jù)庫表table=collection佩微,數(shù)據(jù)記錄行row=document,數(shù)據(jù)集字段column=field缝彬,索引index=index,自動將_id字段設(shè)為主鍵哺眯,沒有join操作谷浅。文檔是一組鍵值對,MongoDB的文檔不需要設(shè)置字段和字段類型,鍵值對是有序的壳贪,MongoDB不能有重復(fù)的鍵陵珍,文檔的鍵是字符串。除了少數(shù)例外情況违施,鍵可以使用任意UTF-8字符互纯。

  • MongoDB中需要保留三個數(shù)據(jù)庫名,它們是安裝好創(chuàng)建并支持直接訪問:

    • admin: 從權(quán)限的角度來看磕蒲,這是"root"數(shù)據(jù)庫留潦。要是將一個用戶添加到這個數(shù)據(jù)庫,這個用戶自動繼承所有數(shù)據(jù)庫的權(quán)限辣往。一些特定的服務(wù)器端命令也只能從這個數(shù)據(jù)庫運行兔院,比如列出所有的數(shù)據(jù)庫或者關(guān)閉服務(wù)器。
    • local: 這個數(shù)據(jù)永遠不會被復(fù)制站削,可以用來存儲限于本地單臺服務(wù)器的任意集合坊萝。
    • config: 當Mongo用于分片設(shè)置時,config數(shù)據(jù)庫在內(nèi)部使用许起,用于保存分片的相關(guān)信息十偶。
  • 默認創(chuàng)建collections和db的方法
    使用use db_name默認創(chuàng)建數(shù)據(jù)倉庫db_name,然后通過db.collection_name.insert(document)可以默認創(chuàng)建collection

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末园细,一起剝皮案震驚了整個濱河市惦积,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猛频,老刑警劉巖狮崩,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鹿寻,居然都是意外死亡睦柴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門烈和,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爱只,“玉大人皿淋,你說我怎么就攤上這事招刹。” “怎么了窝趣?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵疯暑,是天一觀的道長。 經(jīng)常有香客問我哑舒,道長妇拯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮越锈,結(jié)果婚禮上仗嗦,老公的妹妹穿的比我還像新娘。我一直安慰自己甘凭,他們只是感情好稀拐,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丹弱,像睡著了一般德撬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上躲胳,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天蜓洪,我揣著相機與錄音,去河邊找鬼坯苹。 笑死隆檀,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的粹湃。 我是一名探鬼主播刚操,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼再芋!你這毒婦竟也來了菊霜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤济赎,失蹤者是張志新(化名)和其女友劉穎鉴逞,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體司训,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡构捡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了壳猜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勾徽。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖统扳,靈堂內(nèi)的尸體忽然破棺而出喘帚,到底是詐尸還是另有隱情,我是刑警寧澤咒钟,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布吹由,位于F島的核電站,受9級特大地震影響朱嘴,放射性物質(zhì)發(fā)生泄漏倾鲫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乌昔。 院中可真熱鬧隙疚,春花似錦、人聲如沸磕道。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捅厂。三九已至贯卦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間焙贷,已是汗流浹背撵割。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辙芍,地道東北人啡彬。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像故硅,于是被迫代替她去往敵國和親庶灿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

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

  • NoSql數(shù)據(jù)庫優(yōu)缺點 在優(yōu)勢方面主要體現(xiàn)在下面幾點: 簡單的擴展 快速的讀寫 低廉的成本 靈活的數(shù)據(jù)模型 在不足...
    dreamer_lk閱讀 2,730評論 0 6
  • 一吃衅、MongoDB安裝及配置 1.1往踢、下載安裝程序 MongoDB提供了linux平臺上32位和64位的安裝包,你...
    misszero閱讀 1,221評論 1 2
  • mogon簡介 MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫徘层。由 C++ 語言編寫峻呕。旨在為 WEB 應(yīng)用提供可...
    豬哥亮閱讀 2,001評論 0 10
  • mongoDB簡介 MongoDB是用C++語言編寫的非關(guān)系型數(shù)據(jù)庫。特點是高性能趣效、易部署瘦癌、易使用,存儲數(shù)據(jù)十分方...
    AubreyXue閱讀 659評論 2 3
  • 嫁給愛情和現(xiàn)實的區(qū)別,就像天和地西傀,差別真的好大斤寇,熱戀的時候,認為沒什么能阻擋自己對那個人的愛池凄,為了那個人可以放棄事...
    楊_288c閱讀 68評論 0 0