mogodb學習報告(一)

概述


MongoDB是什么?

MongoDB的作用泽示,使用場景缸血?

MongoDB的使用方式?

<br />

MongoDB是什么械筛,有什么特點捎泻。


MongoDB是一種NoSql數(shù)據(jù)庫,是一個使用C++開發(fā)的高性能埋哟,開源笆豁,無模式的文檔型數(shù)據(jù)庫。MongoDB是面向文檔的赤赊,文檔以JSON格式闯狱,二進制JSON (BSON) 存儲在MongoDB中。官方網(wǎng)站地址是:http://www.mongodb.org/ 抛计。

主要特點有:面向集合存儲哄孤,易存儲對象類型的數(shù)據(jù),模式自由并且支持動態(tài)查詢吹截。支持完全索引瘦陈,查詢,支持服務器之間的數(shù)據(jù)復制和故障恢復波俄。使用高效的二進制數(shù)據(jù)存儲晨逝,包括大型對象(如視頻等)。自動處理碎片懦铺,以支持云計算層次的擴展性捉貌,可動態(tài)添加額外的機器。支持Python,PHP昏翰,Ruby苍匆,Java,C棚菊,C#,Javascript叔汁,Perl及C++等

MongoDB的作用统求,使用場景?


適用場景
  • 網(wǎng)站實時數(shù)據(jù)處理据块,它非常適合實時的插入码邻、更新與查詢,并具備網(wǎng)站實時數(shù)據(jù)存儲所需的復制及高度伸縮性另假。
  • 大尺寸像屋,低價值的數(shù)據(jù),使用傳統(tǒng)的關系型數(shù)據(jù)庫存儲一些數(shù)據(jù)時可能會比較昂貴边篮,可以用MongoDB代替己莺。
  • 高伸縮性的場景,非常適合由數(shù)十或數(shù)百臺服務器組成的數(shù)據(jù)庫戈轿。
不適用場景
  • 要求高度事務性的系統(tǒng)凌受,不可靠環(huán)境保證高可用性
  • 復雜的跨文檔(表)級聯(lián)查詢思杯。

MongoDB使用方式


MongoDB安裝(CentOS6.5)

根據(jù)系統(tǒng)類型和位數(shù)選擇合適的安裝包胜蛉。Linux 32-bit legacy 這個版本不推薦在正式環(huán)境使用,這個版本特點是沒有連接ssl相關的庫色乾,并且可能缺少針對操作系統(tǒng)的一些性能優(yōu)化誊册,但是可以測試用,安裝簡單暖璧。推薦按相應操作系統(tǒng)版本選擇對應的安裝包如centos6 rhel6選擇RHEL 6 Linux 64-bit案怯。

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.7.tgz -P /tmp/

創(chuàng)建數(shù)據(jù)庫文件夾,日志文件夾和編寫編輯文件

mv /tmp/mongodb-3.2.7 /usr/local/mongodb
cd /usr/local/mongodb
mkdir db
mkdir logs
cd bin

編寫配置文件

vim /usr/local/mongodb/mongodb.conf
dbpath = /usr/local/mongodb/db   #數(shù)據(jù)庫地址
logpath= /usr/local/mongodb/logs/mongodb.log #日志
port = 27017 #端口
journal=no #不持久化漆撞,災備
storageEngine=mmapv1 #3.0以上默認使用wiredTiger,系統(tǒng)不支持可以切換回mmapv1(待深究)
fork=yes #后臺運行殴泰,守護進程
pidfilepath = /var/run/mongodb/mongod.pid 
auth = true #開啟驗證

開啟MongoDB服務

/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf #開啟服務
echo "/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf" > /etc/rc.local #設置開機啟動

添加超級管理員

/usr/local/mongodb/bin/mongo #連接mongodb

#切換admin數(shù)據(jù)庫,如果不存在自動創(chuàng)建
use admin 
#3.0以下用addUser浮驳。role權限悍汛,db指數(shù)據(jù)庫。root超級管理員至会,還有其他的權限如_system內(nèi)部角色离咐,UserAdmin,dbAdmin等
db.createUser({    
    user:"admin", 
    pwd:"123456", 
    roles:[{role:"root",db:"admin"}]  #
})

#驗證用戶,登錄
db.auth("admin","123456")  

修改防火墻配置

#首先,所有訪問27017 端口的請求都會被拒絕
iptables -I INPUT -p tcp --dport 27017 -j DROP
#當然宵蛀,自己不能被擋在外面昆著,給自己開個后門
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 27017 -j ACCEPT(出于業(yè)務邏輯的需要,有時還需要對服務器的公網(wǎng)IP授權)
#保存修改
/etc/rc.d/init.d/iptables save  
#重啟防火墻
service iptables restart

MongoDB的數(shù)據(jù)庫常用操作命令

# 幫助文檔术陶,yourColl指的是集合
help
db.help()
db.yourColl.help()
db.youColl.find().help()
rs.help();
#顯示所有數(shù)據(jù)庫
show dbs
#當前數(shù)據(jù)庫
db
#顯示所有用戶
show users;

用戶命令

# 切換數(shù)據(jù)庫凑懂,用戶登錄前必須切換到對應的數(shù)據(jù)庫。超級管理員權限也無法在非用戶對應的數(shù)據(jù)庫登錄梧宫。
use admin
# 用戶登錄
db.auth("username","pwd");
# 顯示當前驗證用戶的權限接谨。
show roles 

切換數(shù)據(jù)庫,添加數(shù)據(jù)

use test
# 顯示test數(shù)據(jù)庫里面的所有集合塘匣,數(shù)據(jù)表
show collections
# 插入數(shù)據(jù)
db.user.insert({
  username:"lance",
  age:"18",
  grande:"男",
  job:['coder','PHPer']
})
db.user.insert({
  username:"maven",
  age:"28",
  grande:"男",
  job:['designer','coder']
})

查詢數(shù)據(jù)

# 默認顯示20條脓豪,DBQuery.shellBatchSize=NUM控制顯示調(diào)試,it翻頁
db.user.find(); 
# 格式化輸出
db.user.find().pretty() 
# 條件查詢相當于where username="lance"
db.user.find({username:"lance"}) 
# select age,job where username="maven",1表示顯示忌卤,0表示不顯示扫夜,用true或者false也可以。
db.user.find({username:"maven"},{age:1,job:1}) 

# 相當于where age >=20, $gt大于驰徊,$lt小于笤闯,$ne不等于。
# 按理應取到maven的數(shù)據(jù)辣垒,但maven的age字段是字符串類型望侈,搜索條件的age是int類型,得不到數(shù)據(jù)。應該用db.user.find({age:{$gte:"20"}})
db.user.find({age:{$gte:20}}) 
# 相當于where username like "la%",正則表達式^$
db.user.find({username: /^la/});

# sort 排序勋桶,1為升序脱衙,-1為降序
db.user.find().sort({age: 1}); 
# 獲取前5條數(shù)據(jù)
db.user.find().limit(5); 
# 跳過前5條,獲取10條數(shù)據(jù)例驹,用于分頁
db.user.find().limit(10).skip(5);
# where age = '18' or age= '28'捐韩,或查詢
db.user.find({$or: [{age: 18}, {age: 28}]}); 

更新數(shù)據(jù)

db.user.update({'username':'maven'},{$set:{'age':'20'}}) #更新一條數(shù)據(jù)
db.user.update({'username':'maven'},{$set:{'age':'20'}},{multi:true})#更新所以符合條件的數(shù)據(jù)
db.user.update({'username':'maven'},{$set:{'age':'20'}},{upsert:true})#如果需要更新的數(shù)據(jù)不存在則插入一條數(shù)據(jù)。

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

db.user.remove({'username':'lance'}) #刪除符合條件的所以數(shù)據(jù)
db.user.remove({'username':'lance'},{justOne:1})#只刪除一條數(shù)據(jù)
部分測試代碼

MongoDB的PHP擴展和使用方法

GitHut源地址:https://github.com/mongodb/mongo-php-driver
可以用prec方式安裝鹃锈,或者編譯安裝擴展生成mongo.so荤胁。
修改php.ini文件,在php.ini文件中添加mongo配置屎债,配置如下:

extension=mongo.so

php連接mongodb

// 連接默認主機和端口為:mongodb://localhost:27017
$m = new MongoClient(); 
// 獲取名稱為 "test" 的數(shù)據(jù)庫仅政,不存在自動創(chuàng)建
$db = $m->test; 

創(chuàng)建集合collection

$collection = $db->createCollection("runoob");

插入數(shù)據(jù)

// 選擇集合
$collection = $db->runoob;
$document = array(  "title" => "MongoDB", "description" => "database");
$collection->insert($document);

查詢數(shù)據(jù)

//count()獲取條數(shù),findOne()獲取單條數(shù)據(jù)盆驹。sort排序圆丹。其中 1 為升序排列,而-1是用于降序排列,參數(shù)的先后影響排序順
$collection->find()->sort(array('code'=>1,'money'=>-1));
$collection->find()->fields(array("title"=>false));    //不顯示title
$collection->find()->fields(array("title"=>true));     //只顯示title列    
$collection->find()->limit(1)->skip(1);//跳過 1 條記錄躯喇,取出 1條  
$collection->find(array("money" => array('$in'=>array(20,30,90)))); //in查詢

模糊查詢

$param = array("title" => new MongoRegex('/db/'));    //like '%str%' 糊查詢集合中的數(shù)據(jù) ,正則^$
$result = $collection->find($param);  

更新數(shù)據(jù)

// 更新文檔
$collection->update(array("title"=>"MongoDB"),array('$set'=>array("title"=>"MongoDB 教程")));

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

$collection->remove(array("title"=>"MongoDB 教程"), array("justOne" => true))

MongoDB的常用工具

可視化工具:MongoChef

MongoChef管理界面

參考資料

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辫封,一起剝皮案震驚了整個濱河市硝枉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌倦微,老刑警劉巖妻味,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異欣福,居然都是意外死亡责球,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門劣欢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棕诵,“玉大人,你說我怎么就攤上這事凿将。” “怎么了价脾?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵牧抵,是天一觀的道長。 經(jīng)常有香客問我侨把,道長犀变,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任秋柄,我火速辦了婚禮获枝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘骇笔。我一直安慰自己省店,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布笨触。 她就那樣靜靜地躺著懦傍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芦劣。 梳的紋絲不亂的頭發(fā)上粗俱,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音虚吟,去河邊找鬼寸认。 笑死,一個胖子當著我的面吹牛串慰,可吹牛的內(nèi)容都是我干的偏塞。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼模庐,長吁一口氣:“原來是場噩夢啊……” “哼烛愧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤怜姿,失蹤者是張志新(化名)和其女友劉穎慎冤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沧卢,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蚁堤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了但狭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片披诗。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖立磁,靈堂內(nèi)的尸體忽然破棺而出呈队,到底是詐尸還是另有隱情,我是刑警寧澤唱歧,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布宪摧,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜演怎,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一究恤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熔掺。三九已至饱搏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間置逻,已是汗流浹背推沸。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留券坞,地道東北人鬓催。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像恨锚,于是被迫代替她去往敵國和親宇驾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

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