MongoDB的安裝及學(xué)習(xí)

正常安裝

  • 下載軟件, 在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
  • 啟動(dòng)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" #如果需要移除這個(gè)服務(wù)的話
  • 瀏覽器訪問http://127.0.0.1:27017即可看到以下界面


權(quán)限配置

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

  1. MongoDB是沒有默認(rèn)管理員賬號(hào),所以要先添加管理員賬號(hào),再開啟權(quán)限認(rèn)證。
  2. 切換到admin數(shù)據(jù)庫,添加的賬號(hào)才是管理員賬號(hào)。
  3. 用戶只能在用戶所在數(shù)據(jù)庫登錄,包括管理員賬號(hào)。
  4. 管理員可以管理所有數(shù)據(jù)庫,但是不能直接管理其他數(shù)據(jù)庫,要先在admin數(shù)據(jù)庫認(rèn)證后才可以。

MongoDB有默認(rèn)的角色參考官方文檔,也可以自定義角色,默認(rèn)的角色包括:

  • 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:賦予用戶所有數(shù)據(jù)庫的讀權(quán)限
  • readWriteAnyDatabase:賦予用戶所有數(shù)據(jù)庫的讀寫權(quán)限
  • userAdminAnyDatabase:賦予用戶所有數(shù)據(jù)庫的userAdmin權(quán)限
  • dbAdminAnyDatabase:賦予用戶所有數(shù)據(jù)庫的dbAdmin權(quán)限。
  • root:超級(jí)賬號(hào),超級(jí)權(quán)限
  • __system權(quán)限 ,用于分布式環(huán)境的權(quán)限認(rè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.

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

  • 查看admin庫
C:\Users\kejun.he>mongo
> use admin
switched to db admin
> show collections
system.version
  • 添加超級(jí)權(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

我們?cè)僦匦碌卿洠l(fā)現(xiàn)需要認(rèn)證的配置生效了,這時(shí)候需要通過認(rè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)限認(rè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)系都存儲(chǔ)在單獨(dú)的表中。
    • 數(shù)據(jù)操縱語言,數(shù)據(jù)定義語言
    • 嚴(yán)格的一致性
    • 基礎(chǔ)事務(wù)

    NoSQL

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

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

    缺點(diǎn):

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

    • MongoDB的提供了一個(gè)面向文檔存儲(chǔ),操作起來比較簡(jiǎn)單和容易。
    • 你可以在MongoDB記錄中設(shè)置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實(shí)現(xiàn)更快的排序。
    • Mongo支持豐富的查詢表達(dá)式。查詢指令使用JSON形式的標(biāo)記,可輕易查詢文檔中內(nèi)嵌的對(duì)象及數(shù)組。
    • MongoDb 使用update()命令可以實(shí)現(xiàn)替換完成的文檔(數(shù)據(jù))或者一些指定的數(shù)據(jù)字段 。
    • Mongodb中的Map/reduce主要是用來對(duì)數(shù)據(jù)進(jìn)行批量處理和聚合操作。
    • Map和Reduce。Map函數(shù)調(diào)用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數(shù)進(jìn)行處理。
    • Map函數(shù)和Reduce函數(shù)是使用Javascript編寫的,并可以通過db.runCommand或mapreduce命令來執(zhí)行MapReduce操作。
    • GridFS是MongoDB中的一個(gè)內(nèi)置功能,可以用于存放大量小文件。
    • MongoDB允許在服務(wù)端執(zhí)行腳本,可以用Javascript編寫某個(gè)函數(shù),直接在服務(wù)端執(zhí)行,也可以把函數(shù)的定義存儲(chǔ)在服務(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,自動(dòng)將_id字段設(shè)為主鍵,沒有join操作。文檔是一組鍵值對(duì),MongoDB的文檔不需要設(shè)置字段和字段類型,鍵值對(duì)是有序的,MongoDB不能有重復(fù)的鍵,文檔的鍵是字符串。除了少數(shù)例外情況,鍵可以使用任意UTF-8字符。

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,595評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,814評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,224評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,444評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,988評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,804評(píng)論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,998評(píng)論 1 370
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評(píng)論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,237評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評(píng)論 1 287
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,706評(píng)論 3 393
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,993評(píng)論 2 374

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

  • NoSql數(shù)據(jù)庫優(yōu)缺點(diǎn) 在優(yōu)勢(shì)方面主要體現(xiàn)在下面幾點(diǎn): 簡(jiǎn)單的擴(kuò)展 快速的讀寫 低廉的成本 靈活的數(shù)據(jù)模型 在不足...
    dreamer_lk閱讀 2,759評(píng)論 0 6
  • 一、MongoDB安裝及配置 1.1、下載安裝程序 MongoDB提供了linux平臺(tái)上32位和64位的安裝包,你...
    misszero閱讀 1,237評(píng)論 1 2
  • mogon簡(jiǎn)介 MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫。由 C++ 語言編寫。旨在為 WEB 應(yīng)用提供可...
    豬哥亮閱讀 2,010評(píng)論 0 10
  • mongoDB簡(jiǎn)介 MongoDB是用C++語言編寫的非關(guān)系型數(shù)據(jù)庫。特點(diǎn)是高性能、易部署、易使用,存儲(chǔ)數(shù)據(jù)十分方...
    AubreyXue閱讀 668評(píng)論 2 3
  • 嫁給愛情和現(xiàn)實(shí)的區(qū)別,就像天和地,差別真的好大,熱戀的時(shí)候,認(rèn)為沒什么能阻擋自己對(duì)那個(gè)人的愛,為了那個(gè)人可以放棄事...
    楊_288c閱讀 76評(píng)論 0 0