MongoDB數(shù)據(jù)庫(kù)

  • MongoDB 是一個(gè)基于分布式 文件存儲(chǔ)的NoSQL數(shù)據(jù)庫(kù)
  • 由C++語(yǔ)言編寫爬舰,運(yùn)行穩(wěn)定身弊,性能高
  • 旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案
  • 查看官方網(wǎng)站

MongoDB特點(diǎn)

  • 模式自由 :可以把不同結(jié)構(gòu)的文檔存儲(chǔ)在同一個(gè)數(shù)據(jù)庫(kù)里
  • 面向集合的存儲(chǔ):適合存儲(chǔ) JSON風(fēng)格文件的形式
  • 完整的索引支持:對(duì)任何屬性可索引
  • 復(fù)制和高可用性:支持服務(wù)器之間的數(shù)據(jù)復(fù)制伐谈,支持主-從模式及服務(wù)器之間的相互復(fù)制寡痰。復(fù)制的主要目的是提供冗余及自動(dòng)故障轉(zhuǎn)移
  • 自動(dòng)分片:支持云級(jí)別的伸縮性:自動(dòng)分片功能支持水平的數(shù)據(jù)庫(kù)集群,可動(dòng)態(tài)添加額外的機(jī)器
  • 豐富的查詢:支持豐富的查詢表達(dá)方式糙捺,查詢指令使用JSON形式的標(biāo)記伐割,可輕易查詢文檔中的內(nèi)嵌的對(duì)象及數(shù)組
  • 快速就地更新:查詢優(yōu)化器會(huì)分析查詢表達(dá)式候味,并生成一個(gè)高效的查詢計(jì)劃
  • 高效的傳統(tǒng)存儲(chǔ)方式:支持二進(jìn)制數(shù)據(jù)及大型對(duì)象(如照片或圖片)

基本操作

  • MongoDB將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔刃唤,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成
  • MongoDB文檔類似于JSON對(duì)象,字段值可以包含其他文檔白群、數(shù)組尚胞、文檔數(shù)組
  • 安裝管理mongodb環(huán)境
  • 完成數(shù)據(jù)庫(kù)、集合的管理
  • 數(shù)據(jù)的增加川抡、修改辐真、刪除、查詢

名詞

SQL術(shù)語(yǔ)/概念 MongoDB術(shù)語(yǔ)/概念 解釋/說(shuō)明
database database 數(shù)據(jù)庫(kù)
table collection 數(shù)據(jù)庫(kù)表/集合
row document 數(shù)據(jù)記錄行/文檔
column field 數(shù)據(jù)字段/域
index index 索引
tablejoins 表連接,MongoDB不支持
primary key primary key 主鍵,MongoDB自動(dòng)將_id字段設(shè)置為主鍵
  • 三元素:數(shù)據(jù)庫(kù),集合,文檔
  1. 集合就是關(guān)系數(shù)據(jù)庫(kù)中的表
  2. 文檔對(duì)應(yīng)著關(guān)系數(shù)據(jù)庫(kù)中的行
  • 文檔弛饭,就是一個(gè)對(duì)象,由鍵值對(duì)構(gòu)成楔脯,是json的擴(kuò)展Bson形式
{'name':'guojing','gender':'男'}
  • 集合:類似于關(guān)系數(shù)據(jù)庫(kù)中的表,儲(chǔ)存多個(gè)文檔胯甩,結(jié)構(gòu)不固定昧廷,如可以存儲(chǔ)如下文檔在一個(gè)集合中
{'name':'guojing','gender':'男'}
{'name':'huangrong','age':18}
{'book':'shuihuzhuan','heros':'108'}
  • 數(shù)據(jù)庫(kù):是一個(gè)集合的物理容器,一個(gè)數(shù)據(jù)庫(kù)中可以包含多個(gè)文檔
  • 一個(gè)服務(wù)器通常有多個(gè)數(shù)據(jù)庫(kù)

1.啟動(dòng)服務(wù)器

在終端敲:mongod來(lái)啟動(dòng)MongoDB服務(wù)器

2.啟動(dòng)客戶端

在終端敲:mongo來(lái)啟動(dòng)MongoDB客戶器

3.數(shù)據(jù)庫(kù)切換

  • 查看當(dāng)前數(shù)據(jù)庫(kù)名稱
db
  • 查看所有數(shù)據(jù)庫(kù)名稱,列出所有在物理上存在的數(shù)據(jù)庫(kù)
show dbs
  • 切換數(shù)據(jù)庫(kù),如果數(shù)據(jù)庫(kù)不存在偎箫,則指向數(shù)據(jù)庫(kù)木柬,但不創(chuàng)建,直到插入數(shù)據(jù)或創(chuàng)建集合時(shí)數(shù)據(jù)庫(kù)才被創(chuàng)建
use 數(shù)據(jù)庫(kù)名稱
  • 默認(rèn)的數(shù)據(jù)庫(kù)為test淹办,如果你沒(méi)有創(chuàng)建新的數(shù)據(jù)庫(kù)眉枕,集合將存放在test數(shù)據(jù)庫(kù)中

4. 數(shù)據(jù)庫(kù)刪除

  • 刪除==當(dāng)前指向的數(shù)據(jù)==庫(kù),如果數(shù)據(jù)庫(kù)不存在,則什么也不做
db.dropDatabase()

5.集合創(chuàng)建

  • 語(yǔ)法

name是要?jiǎng)?chuàng)建的集合的名稱,options是一個(gè)文檔怜森,用于指定集合的配置
選項(xiàng)??參數(shù)是可選的速挑,所以只需要到指定的集合名稱。以下是可以使用的選項(xiàng)列表

例1:不限制集合大小

db.createCollection("stu")

例2:限制集合大小副硅,后面學(xué)會(huì)插入語(yǔ)句后可以查看效果
參數(shù)capped:默認(rèn)值為false表示不設(shè)置上限姥宝,值為true表示設(shè)置上限
參數(shù)size:當(dāng)capped值為true時(shí),需要指定此參數(shù)恐疲,表示上限大小腊满,當(dāng)文檔達(dá)到上限時(shí),會(huì)將之前的數(shù)據(jù)覆蓋培己,單位為字節(jié)

db.createCollection("sub", { capped : true, size : 10 } )

6.查看當(dāng)前數(shù)據(jù)庫(kù)的集合

  • 語(yǔ)法
show collections

7. 刪除

db.集合名稱.drop()

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

  • 下表為MongoDB中常用的幾種數(shù)據(jù)類型:
  1. Object ID:文檔ID
  2. String:字符串糜烹,最常用,必須是有效的UTF-8
  3. Boolean:存儲(chǔ)一個(gè)布爾值漱凝,true或false
  4. Integer:整數(shù)可以是32位或64位,這取決于服務(wù)器
  5. Double:存儲(chǔ)浮點(diǎn)值
  6. Arrays:數(shù)組或列表诸迟,多個(gè)值存儲(chǔ)到一個(gè)鍵
  7. Object:用于嵌入式的文檔茸炒,即一個(gè)值為一個(gè)文檔
  8. Null:存儲(chǔ)Null值
  9. Timestamp:時(shí)間戳
  10. Date:存儲(chǔ)當(dāng)前日期或時(shí)間的UNIX時(shí)間格式
  • object id

每個(gè)文檔都有一個(gè)屬性愕乎,為_id,保證每個(gè)文檔的唯一性壁公,可以自己去設(shè)置_id插入文檔感论,如果沒(méi)有提供,那么MongoDB為每個(gè)文檔提供了一個(gè)獨(dú)特的_id紊册,類型為objectID比肄,objectID是一個(gè)12字節(jié)的十六進(jìn)制數(shù),前4個(gè)字節(jié)為當(dāng)前時(shí)間戳囊陡,接下來(lái)3個(gè)字節(jié)的機(jī)器ID芳绩,接下來(lái)的2個(gè)字節(jié)中MongoDB的服務(wù)進(jìn)程id,最后3個(gè)字節(jié)是簡(jiǎn)單的增量值

插入

插入文檔時(shí)撞反,如果不指定_id參數(shù)妥色,MongoDB會(huì)為文檔分配一個(gè)唯一的ObjectId

db.集合名稱.insert(document)
db.stu.insert({name:'gj',gender:1})

查詢

db.集合名稱.find()
db.mystu.find()

更新

參數(shù)query:查詢條件,類似sql語(yǔ)句update中where部分
參數(shù)update:更新操作符遏片,類似sql語(yǔ)句update中set部分
參數(shù)multi:可選嘹害,默認(rèn)是false,表示只更新找到的第一條記錄吮便,值為true表示把滿足條件的文檔全部更新

db.集合名稱.update(
   <query>,
   <update>,
   {multi: <boolean>}
)

全屬性更新


db.mystu.update({'name':'fangyukui'},{name:'yu-vin',gender:25})

指定屬性更新笔呀,通過(guò)操作符$set

db.mystu.update({'name':'yu-vin'},{$set:{gender:24}})

修改多條匹配到的數(shù)據(jù)

b.mystu.update({},{$set:{gender:0}},{multi:true})

保存

如果文檔的_id已經(jīng)存在則修改,如果文檔的_id不存在則添加

db.集合名稱.save(document)
db.stu.save({_id:'1','name':'yk',gender:1})
db.stu.save({_id:'1','name':'yu',gender:1})

刪除

參數(shù)query:可選髓需,刪除的文檔的條件
參數(shù)justOne:可選许师,如果設(shè)為true或1,則只刪除一條授账,默認(rèn)false枯跑,表示刪除多條

db.集合名稱.remove(
   <query>,
   {
     justOne: <boolean>
   }
)
db.mystu.remove({gender:0},{justOne:true})

全部刪除

db.mystu.remove({})

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

方法find():查詢

db.集合名稱.find({條件文檔})

方法findOne():查詢,只返回第一個(gè)

db.集合名稱.findOne({條件文檔})

方法pretty():將結(jié)果格式化

db.集合名稱.find({條件文檔}).pretty()

比較運(yùn)算符

等于白热,默認(rèn)是等于判斷敛助,沒(méi)有運(yùn)算符
小于$lt
小于或等于$lte
大于$gt
大于或等于$gte
不等于$ne
db.stu.find({name:'gj'})
db.stu.find({age:{$gte:18}})

邏輯運(yùn)算符

查詢時(shí)可以有多個(gè)條件,多個(gè)條件之間需要通過(guò)邏輯運(yùn)算符連接
邏輯與:默認(rèn)是邏輯與的關(guān)系

查詢年齡大于或等于18屋确,并且性別為1的學(xué)生
db.stu.find({age:{$gte:18},gender:1})

邏輯或:使用$or

查詢年齡大于18纳击,或性別為0的學(xué)生
db.stu.find({$or:[{age:{$gt:18}},{gender:1}]})

and和or一起使用

查詢年齡大于18或性別為0的學(xué)生,并且學(xué)生的姓名為gj
db.stu.find({$or:[{age:{$gte:18}},{gender:1}],name:'gj'})

范圍運(yùn)算符

使用"$in"攻臀,"$nin" 判斷是否在某個(gè)范圍內(nèi)

查詢年齡為18焕数、28的學(xué)生
db.stu.find({age:{$in:[18,28]}})

支持正則表達(dá)式

使用//或$regex編寫正則表達(dá)式

db.stu.find({name:/^黃/})
db.stu.find({name:{$regex:'^黃'}}})

自定義查詢

使用$where后面寫一個(gè)函數(shù),返回滿足條件的數(shù)據(jù)

查詢年齡大于30的學(xué)生
db.stu.find({$where:function(){return this.age>20}})

Limit

方法limit():用于讀取指定數(shù)量的文檔

參數(shù)NUMBER表示要獲取文檔的條數(shù)
如果沒(méi)有指定參數(shù)則顯示集合中的所有文檔

db.集合名稱.find().limit(NUMBER)

skip

方法skip():用于跳過(guò)指定數(shù)量的文檔

參數(shù)NUMBER表示跳過(guò)的記錄條數(shù)刨啸,默認(rèn)值為0

db.stu.find().skip(2)

一起使用

方法limit()和skip()可以一起使用堡赔,不分先后順序

db.stu.find().limit(4).skip(5)
或
db.stu.find().skip(5).limit(4)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市设联,隨后出現(xiàn)的幾起案子善已,更是在濱河造成了極大的恐慌灼捂,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件换团,死亡現(xiàn)場(chǎng)離奇詭異悉稠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)艘包,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門的猛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人想虎,你說(shuō)我怎么就攤上這事卦尊。” “怎么了磷醋?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵猫牡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我邓线,道長(zhǎng)淌友,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任骇陈,我火速辦了婚禮震庭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘你雌。我一直安慰自己器联,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布婿崭。 她就那樣靜靜地躺著拨拓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氓栈。 梳的紋絲不亂的頭發(fā)上渣磷,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音授瘦,去河邊找鬼醋界。 笑死,一個(gè)胖子當(dāng)著我的面吹牛提完,可吹牛的內(nèi)容都是我干的形纺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼徒欣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逐样!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤官研,失蹤者是張志新(化名)和其女友劉穎秽澳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戏羽,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年楼吃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了始花。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡孩锡,死狀恐怖酷宵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情躬窜,我是刑警寧澤浇垦,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站荣挨,受9級(jí)特大地震影響男韧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜默垄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一此虑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧口锭,春花似錦朦前、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至荆隘,卻和暖如春恩伺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背臭胜。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工莫其, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耸三。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓乱陡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親仪壮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子憨颠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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