正常安裝
- 下載軟件补鼻, 在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)限哭当,需要理解:
- MongoDB是沒有默認管理員賬號猪腕,所以要先添加管理員賬號,再開啟權(quán)限認證钦勘。
- 切換到admin數(shù)據(jù)庫陋葡,添加的賬號才是管理員賬號。
- 用戶只能在用戶所在數(shù)據(jù)庫登錄彻采,包括管理員賬號腐缤。
- 管理員可以管理所有數(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