0405-MongoDB

MongoDB旨在為web應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲方案

MongoDB將數(shù)據(jù)存儲為一個文檔缤剧,數(shù)據(jù)結(jié)構(gòu)由鍵值對(key=>value)組成笼痹,類似json對象韭赘,字段值可以包含其他文檔扁掸、數(shù)組乓诽、文檔數(shù)組


MongoDB文檔


安裝mongodb

MongoDB-OSX官方下載

# 進(jìn)入?

/usr/localcd/usr/local


# 下載

sudo curl-O https://fastdl.mongodb.org/osx/mongodb-osx-x86_64-3.4.2.tgz


# 解壓

sudo tar-zxvf mongodb-osx-x86_64-3.4.2.tgz


# 重命名為 mongodb 目錄

sudo mv mongodb-osx-x86_64-3.4.2mongodb


安裝完成后,我們可以把 MongoDB 的二進(jìn)制命令文件目錄(安裝目錄/bin)添加到 PATH 路徑中:

exportPATH=/usr/local/mongodb/bin:$PATH


運行配置 MongoDB

# 首先創(chuàng)建一個數(shù)據(jù)庫存儲目錄 /data/db:

sudo mkdir-p/data/db


# 啟動 mongodb晨横,默認(rèn)數(shù)據(jù)庫目錄即為 /data/db:

sudo mongod


#創(chuàng)建文件洋腮,進(jìn)入mongodb目錄

cd /usr/local/mongodb

mkdir data

mkdir logs

兩個文件夾,分別是存儲數(shù)據(jù)庫數(shù)據(jù)和日志文件的

# 然后

sudo vim mongodb.conf

其中conf文件內(nèi)容為:

port=27017

dbpath=/usr/local/mongodb/data

logpath=/usr/local/mongodb/logs/mongodb.log

logappend=true

第一個是配置的是mongodb的啟動端口颓遏,然后dbpath是指數(shù)據(jù)的存儲路徑徐矩,logpath是指日志存儲路徑,logappend是指日志是否以追加方式添加結(jié)束編輯按 esc

然后 :wq ? ?保存退出


# 調(diào)用mongod命令叁幢,-f 是以配置文件形式啟動滤灯,后面指定的是配置文件所在的位置

sudo /usr/local/mongodb/bin/mongod? -f /usr/local/mongodb/mongdb.conf

# 輸入命令 ,telnet ip地址 端口號曼玩,測試能不能連接某個ip地址的端口鳞骤,如果能連接,證明這個端口已經(jīng)開了黍判,也就是你的應(yīng)用程序已經(jīng)運行了

telnet 127.0.0.1 27017

**還有個方式豫尽,輸入? ps -ef|grep mongodb



啟動MongoDB

在 MongoDB 安裝目錄的 bin 目錄下執(zhí)行mongod即可。


MongoDB可視化工具的使用

# 下載

mac-mongodb可視化工具

# 打開

#設(shè)置



文檔

文檔是一個鍵值(key-value)對(即BSON)顷帖。MongoDB 的文檔不需要設(shè)置相同的字段美旧,并且相同的字段不需要相同的數(shù)據(jù)類型,


**需要注意的是:

-文檔中的鍵/值對是有序的贬墩。

-文檔中的值不僅可以是在雙引號里面的字符串榴嗅,還可以是其他幾種數(shù)據(jù)類型(甚至可以是整個嵌入的文檔)。

-MongoDB區(qū)分類型和大小寫陶舞。

-MongoDB的文檔不能有重復(fù)的鍵嗽测。

-文檔的鍵是字符串。除了少數(shù)例外情況肿孵,鍵可以使用任意UTF-8字符唠粥。

**文檔鍵命名規(guī)范:

-鍵不能含有\(zhòng)0 (空字符)疏魏。這個字符用來表示鍵的結(jié)尾。

-.和$有特別的意義晤愧,只有在特定環(huán)境下才能使用大莫。

-以下劃線"_"開頭的鍵是保留的(不是嚴(yán)格要求的)。


什么是集合

就是數(shù)據(jù)庫表

沒有固定結(jié)構(gòu)

對集合可以插入不同格式和類型的數(shù)據(jù)养涮,但通常情況下插入集合的數(shù)據(jù)都會有一定的關(guān)聯(lián)性葵硕。

當(dāng)?shù)谝粋€文檔插入時,集合就會被創(chuàng)建贯吓。


capped collections

Capped collections 就是固定大小的collection。

它有很高的性能以及隊列過期的特性(過期按照插入的順序). 有點和 "RRD" 概念類似蜀变。

Capped collections是高性能自動的維護(hù)對象的插入順序悄谐。它非常適合類似記錄日志的功能 和標(biāo)準(zhǔn)的collection不同,你必須要顯式的創(chuàng)建一個capped collection库北, 指定一個collection的大小爬舰,單位是字節(jié)。collection的數(shù)據(jù)存儲空間值提前分配的寒瓦。

要注意的是指定的存儲大小包含了數(shù)據(jù)庫的頭信息情屹。

db.createCollection("mycoll",{capped:true,size:100000})


MongoDB數(shù)據(jù)類型



Mongodb基本命令的使用

數(shù)據(jù)庫

# 啟動數(shù)據(jù)庫

? ./mongo


# 查看所有數(shù)據(jù)庫

? ?show dbs


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

? ?db.dropDatabase()


# 顯示當(dāng)前數(shù)據(jù)庫對象或集合

? ?show db


# 運行"use"命令,可以連接到一個指定的數(shù)據(jù)庫,如果數(shù)據(jù)庫不存在杂腰,則創(chuàng)建數(shù)據(jù)庫

? ?use local

有一些數(shù)據(jù)庫名是保留的垃你,可以直接訪問這些有特殊作用的數(shù)據(jù)庫。

admin: 從權(quán)限的角度來看喂很,這是"root"數(shù)據(jù)庫惜颇。要是將一個用戶添加到這個數(shù)據(jù)庫,這個用戶自動繼承所有數(shù)據(jù)庫的權(quán)限少辣。一些特定的服務(wù)器端命令也只能從這個數(shù)據(jù)庫運行凌摄,比如列出所有的數(shù)據(jù)庫或者關(guān)閉服務(wù)器。

local:這個數(shù)據(jù)永遠(yuǎn)不會被復(fù)制漓帅,可以用來存儲限于本地單臺服務(wù)器的任意集合

config: 當(dāng)Mongo用于分片設(shè)置時锨亏,config數(shù)據(jù)庫在內(nèi)部使用,用于保存分片的相關(guān)信息忙干。


文檔

# 剛創(chuàng)建的數(shù)據(jù)庫并不在數(shù)據(jù)庫的列表中器予, 要顯示它,我們需要向該數(shù)據(jù)庫插入一些數(shù)據(jù)豪直。

# 插入文檔劣摇,COLLECTION_NAME是集合名,如果該集合不在該數(shù)據(jù)庫中弓乙, MongoDB 會自動創(chuàng)建該集合并插入文檔末融。

? ?db.COLLECTION_NAME.insert(document)? /db.COLLECTION_NAME.save(document)


# 查看文檔

? db.COLLECTION_NAME.find()


# 格式化返回結(jié)果查看文檔

? db.COLLECTION_NAME.find().pretty()


# 只返回一個文檔

? ? findOne()


# 也可以將數(shù)據(jù)直接定義成變量再插入

? ?document=({xx:'xx',yy:'yy'});

? ?db.COLLECTION_NAME.insert(document)


# 查看集合

? ? show tables


# ?刪除集合

? ? db.COLLECTION_NAME.drop()


# 更新文檔

? ? ## update() 方法用于更新已存在的文檔

參數(shù)說明:

query: update的查詢條件钧惧,類似sql update查詢內(nèi)where后面的。

update: update的對象和一些更新的操作符(如$,$inc...)等勾习,也可以理解為sql update查詢內(nèi)set后面的

upsert: 可選浓瞪,這個參數(shù)的意思是,如果不存在update的記錄巧婶,是否插入objNew,true為插入乾颁,默認(rèn)是false,不插入艺栈。

multi: 可選英岭,mongodb 默認(rèn)是false,只更新找到的第一條記錄,如果這個參數(shù)為true,就把按條件查出來多條記錄全部更新湿右。

writeConcern:可選诅妹,拋出異常的級別。


? ## save() 方法通過傳入的文檔來替換已有文檔


參數(shù)說明:

document: 文檔數(shù)據(jù)毅人。

writeConcern:可選吭狡,拋出異常的級別。


# remove()函數(shù)是用來移除集合中的數(shù)據(jù)


參數(shù)說明:

query:(可選)刪除的文檔的條件丈莺。

justOne: (可選)如果設(shè)為 true 或 1划煮,則只刪除一個文檔。

writeConcern:(可選)拋出異常的級別缔俄。


# 刪除所有數(shù)據(jù)

? db.COLLECTION_NAME.remove({})


MongoDB 與 RDBMS Where 語句比較



MongoDB AND 條件

db.COLLECTION_NAME.find({key1:value1,key2:value2}).pretty()


MongoDB OR 條件

db.COLLECTION_NAME.find({$or:[{key1:value1},{key2:value2}]}).pretty()



AND 和 OR 聯(lián)合使用

類似常規(guī) SQL 語句為:'where likes>50 AND (by = '菜鳥教程' OR title = 'MongoDB 教程')'



MongoDB條件操作符

(>) 大于 - $gt

(<) 小于 - $lt

(>=) 大于等于 - $gte

(<= ) 小于等于 - $lte


MongoDB$type操作符

$type操作符是基于BSON類型來檢索集合中匹配的數(shù)據(jù)類型弛秋,并返回結(jié)果。

db.COLLECTION_NAME.find({"條件":{$type:類型數(shù)字}})


MongoDB Limit() 方法

limit()方法接受一個數(shù)字參數(shù)牵现,該參數(shù)指定從MongoDB中讀取的記錄條數(shù)铐懊。

db.COLLECTION_NAME.find(“條件”).limit(記錄條數(shù))


MongoDB Skip() 方法

skip()方法來跳過指定數(shù)量的數(shù)據(jù),skip方法同樣接受一個數(shù)字參數(shù)作為跳過的記錄條數(shù)瞎疼。

db.COLLECTION_NAME.find().skip(NUMBER)


MongoDB sort()方法

sort()方法可以通過參數(shù)指定排序的字段科乎,并使用 1 和 -1 來指定排序的方式,其中 1 為升序排列贼急,而-1是用于降序排列茅茂。

db.COLLECTION_NAME.find().sort({KEY:1/-1})


MongoDB 索引

索引是特殊的數(shù)據(jù)結(jié)構(gòu),索引存儲在一個易于遍歷讀取的數(shù)據(jù)集合中太抓,索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)

db.COLLECTION_NAME.ensureIndex({KEY:1})

Key 值為要創(chuàng)建的索引字段空闲,1為指定按升序創(chuàng)建索引,降序為-1,也可以設(shè)置使用多個字段創(chuàng)建索引(關(guān)系型數(shù)據(jù)庫中稱作復(fù)合索引)


ensureIndex() 接收可選參數(shù)走敌,可選參數(shù)列表如下:



MongoDB 聚合

主要用于處理數(shù)據(jù)(諸如統(tǒng)計平均值,求和等)碴倾,并返回計算后的數(shù)據(jù)結(jié)果。有點類似sql語句中的 count(*)。

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

聚合框架中常用的幾個管道操作符:

$project:修改輸入文檔的結(jié)構(gòu)跌榔∫煅悖可以用來重命名、增加或刪除域僧须,也可以用于創(chuàng)建計算結(jié)果以及嵌套文檔纲刀。

$match:用于過濾數(shù)據(jù),只輸出符合條件的文檔担平。$match使用MongoDB的標(biāo)準(zhǔn)查詢操作示绊。

$limit:用來限制MongoDB聚合管道返回的文檔數(shù)。

$skip:在聚合管道中跳過指定數(shù)量的文檔暂论,并返回余下的文檔面褐。

$unwind:將文檔中的某一個數(shù)組類型字段拆分成多條,每條包含數(shù)組中的一個值空另。

$group:將集合中的文檔分組盆耽,可用于統(tǒng)計結(jié)果。

$sort:將輸入文檔排序后輸出扼菠。

$geoNear:輸出接近某一地理位置的有序文檔。



Node.js 連接 MongoDB

# 安裝驅(qū)動

? npm install mongodb


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


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


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


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






mongoose模塊的使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坝咐,一起剝皮案震驚了整個濱河市循榆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌墨坚,老刑警劉巖秧饮,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泽篮,居然都是意外死亡盗尸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門帽撑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泼各,“玉大人,你說我怎么就攤上這事亏拉】垓撸” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵及塘,是天一觀的道長莽使。 經(jīng)常有香客問我,道長笙僚,這世上最難降的妖魔是什么芳肌? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上亿笤,老公的妹妹穿的比我還像新娘翎迁。我一直安慰自己,他們只是感情好责嚷,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布鸳兽。 她就那樣靜靜地躺著,像睡著了一般罕拂。 火紅的嫁衣襯著肌膚如雪揍异。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天爆班,我揣著相機與錄音衷掷,去河邊找鬼。 笑死柿菩,一個胖子當(dāng)著我的面吹牛戚嗅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播枢舶,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼懦胞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了凉泄?” 一聲冷哼從身側(cè)響起躏尉,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎后众,沒想到半個月后胀糜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡蒂誉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年教藻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片右锨。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡括堤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出陡蝇,到底是詐尸還是另有隱情痊臭,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布登夫,位于F島的核電站广匙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恼策。R本人自食惡果不足惜鸦致,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一潮剪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧分唾,春花似錦抗碰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至折砸,卻和暖如春看疗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背睦授。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工两芳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人去枷。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓怖辆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親删顶。 傳聞我的和親對象是個殘疾皇子竖螃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

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