Mongodb基本操作

mongodb介紹

1.什么是mongodb?

  • mongodb 是由c++語言編寫的嗡善,是一個(gè)基于分布式文件存儲(chǔ)的開源數(shù)據(jù)庫系統(tǒng)锦针,在高負(fù)荷的情況下玖翅,添加更多的節(jié)點(diǎn)唐全,可以保證服務(wù)的性能
  • MongoDB 旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。
  • MongoDB 將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔接癌,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成心赶。MongoDB 文檔類似于 JSON 對(duì)象。字段值可以包含其他文檔扔涧,數(shù)組及文檔數(shù)組。

三元素: 數(shù)據(jù)庫、集合枯夜、文檔

數(shù)據(jù)庫是一個(gè)集合的物理容器
集合就是關(guān)系數(shù)據(jù)庫中的表
文檔對(duì)應(yīng)著關(guān)系數(shù)據(jù)庫中的行
1). 文檔弯汰,就是一個(gè)對(duì)象,由鍵值對(duì)構(gòu)成湖雹,是json的擴(kuò)展Bson形式 {'name':'guojing','gender':'男’}

2). 集合:類似于關(guān)系數(shù)據(jù)庫中的表咏闪,儲(chǔ)存多個(gè)文檔,結(jié)構(gòu)不固定摔吏,如可以存儲(chǔ)如下文檔在一個(gè)集合中 {'name':'guojing','gender':'男'} {'name':'huangrong','age':18} {'book':'shuihuzhuan','heros':'108’}

3). 一個(gè)mongodb中可以建立多個(gè)數(shù)據(jù)庫

4). 數(shù)據(jù)庫:是一個(gè)集合的物理容器鸽嫂,一個(gè)數(shù)據(jù)庫中可以包含多個(gè)集合

5). 集合:集合中可以存儲(chǔ)多個(gè)文檔
6). 文檔:就是一個(gè)對(duì)象,由鍵值對(duì)構(gòu)成征讲,是json的擴(kuò)展Bson(可以理解為在JSON的基礎(chǔ)上添加了一些json中沒有的數(shù)據(jù)類型)形式据某。 需要注意的是:

2.mongodb啟動(dòng)

1.啟動(dòng)

sudo service mongodb start
2.停止
sudo service mongodb stop
3.重置
sudo service mongdb restop
4.退出鏈接
exit/ctrl+c

3.數(shù)據(jù)庫、集合相關(guān)操作

數(shù)據(jù)庫基本命令

1.查看當(dāng)前數(shù)據(jù)庫

db

  1. 列出所有數(shù)據(jù)庫

show dbs
3.切換數(shù)據(jù)庫诗箍,如果不存在癣籽,則指向但不創(chuàng)建,直到插入數(shù)據(jù)或者創(chuàng)建集合時(shí)數(shù)據(jù)庫才被創(chuàng)建
use 數(shù)據(jù)庫名
4.查看當(dāng)前數(shù)據(jù)庫信息
db.stats()
5.刪除數(shù)據(jù)庫
db.dropDatabase()

集合的相關(guān)操作

1.創(chuàng)建集合

db.createCollection(name,options)

name是要?jiǎng)?chuàng)建的集合的名稱
options是一個(gè)文檔滤祖,用于指定集合的配置 選項(xiàng)??參數(shù)是可選的筷狼,所以只需要到指定的集合名稱

options參數(shù):

capped 布爾(可選)如果為 true,則創(chuàng)建固定集合匠童。固定集合是指有著固定大小的集合埂材,當(dāng)達(dá)到最大值時(shí),它會(huì)自動(dòng)覆蓋最早的文檔汤求。 當(dāng)該值為 true 時(shí)俏险,必須指定 size 參數(shù)。

autoIndexId 布爾 (可選)如為 true首昔,自動(dòng)在 _id 字段創(chuàng)建索引寡喝。默認(rèn)為 false。

size 數(shù)值 (可選)為固定集合指定一個(gè)最大值.當(dāng)文檔達(dá)到上限時(shí)勒奇,會(huì)將之前的數(shù)據(jù)覆蓋预鬓,單位為字節(jié)。如果 capped 為 true赊颠,也需要指定該字段格二。

max 數(shù)值 (可選)指定固定集合中包含文檔的最大數(shù)量。

2.查看數(shù)據(jù)庫集合

show collections

3.刪除集合
db.集合名稱.drop()

3.數(shù)據(jù)的增刪改查

1.插入文檔

  • 單條插入

db.集合名稱.insert({文檔})

查詢?nèi)课臋n

db.集合名稱.find()

更新文檔

  1. update() 方法用于更新已存在的文檔

db.集合名稱.update()

參數(shù):

  • query : update的查詢條件竣蹦,類似sql update查詢內(nèi)where后面的顶猜。

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

  • upsert : 可選痘括,這個(gè)參數(shù)的意思是长窄,如果不存在update 的記錄滔吠,是否插入objNew,true為插入,默認(rèn)是false挠日,不插 入疮绷。

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

全文檔更新


db.stu.update(
    {name:'趙文竹'},
    {name:'哈哈哈'}
)

指定屬性更新,通過操作符$se


db.stu.update(
    {name:'趙文竹'}懂算,
    {
        $set:{name:'啦啦啦'}
    }
)

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

db.stu.update(
    {name:'趙文竹'}只冻,
    {
        $set:{name:'啦啦啦'}
    },
    {multi:true}
)

2.save() 方法通過傳入的文檔來替換已有文檔计技,如果文檔的_id已經(jīng)存在則修改喜德,不存在則添加

db.stu.update(
    {name:'趙文竹'},
    {
        $set:{name:'啦啦啦'}
    }
)

pretty()

該函數(shù)酸役,講數(shù)據(jù)以格式化的方法展示

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

刪除文檔

db.集合名稱.remove(document)

remove()方法基本格式:

db.collection.remove(
<query>,
{justOne: <boolean>,}
)

參數(shù)說明
query :(可選)刪除的文檔的條件住诸。
justOne : (可選)如果設(shè)為 true 或 1,則只刪除一個(gè)文檔涣澡。

基本的數(shù)據(jù)查詢

查全部

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

查一個(gè)

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

比較運(yùn)算符

等于贱呐,默認(rèn)是等于判斷,沒有運(yùn)算符
小于lt 小于或等于lte
大于gt 大于或等于gte
不等于$ne

例:查詢年齡大于或等于18的學(xué)生

db.stu.find({age:{$gte:18}})

邏輯運(yùn)算符

1.默認(rèn)是邏輯與的關(guān)系

2.邏輯或使用$or

db.stu.find(
    {
        $or:[
            {age:{$gt:18}},
            {gender:1}
        ]
    }
)

3.and和or一起使用
例5:查詢年齡大于18或性別為0的學(xué)生入桂,并且學(xué)生的姓名為gj

db.stu.find(
    {
        $or:[
            {age:{$gte:18}},
            {gender:1}
        ],
        name:'gj'
    }
)

范圍運(yùn)算符

$in $nin判斷是否在某個(gè)范圍內(nèi)

db.stu.find(
    {
        age:{$in:[18,28]}
    }
)

支持正則表達(dá)式

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

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

$type

獲取某一種類型的數(shù)據(jù)奄薇,使用$type

db.col.find(
    {
        "title" : {$type : 'string'}
    }
)

limit 與Skip方法

limit() 方法 讀取指定數(shù)量的數(shù)據(jù)記錄

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

Skip() 方法 使用skip()方法來跳過指定數(shù)量的數(shù)據(jù),skip方法同樣接受一個(gè)數(shù)字參數(shù)作為跳過的記錄條數(shù)抗愁。

db.集合名稱.find().skip(num)

limit() 方法馁蒂、Skip() 方法 同時(shí)使用,不分先后順序 表示跳過多少條蜘腌,返回多少條

sort() 方法排序

** sort() **方法對(duì)數(shù)據(jù)進(jìn)行排序沫屡,sort() 方法可以通過參數(shù)指定排序的字段,并使用 1 和 -1 來指定排序的方式撮珠,其中 1 為升序排列沮脖,而 -1 是用于降序排列。

升序
db.集合名稱.find().sort({排序字段:1})
降序
db.集合名稱.find().sort({排序字段:-1})

注意: skip(), limilt(), sort()三個(gè)放在一起執(zhí)行的時(shí)候芯急,執(zhí)行的順序是先 sort(), 然后是 skip()勺届,最后是顯示的 limit()。

distinct() 去重

db.集合名稱.distinct('去重字段',{條件})

例:查找年齡大于20的姓名(去重)
db.集合名稱.distinct('name',{age:{$gt:20}})

project投影(可以指定想要返回的字段)

在查詢到的返回結(jié)果中娶耍,只選擇必要的字段免姿,而不是選擇一個(gè)文檔的整個(gè)字段

參數(shù)為字段與值,值為1表示顯示榕酒,值為0不顯示

db.集合名稱.find({},{字段名稱:0,...})

count() 統(tǒng)計(jì)個(gè)數(shù)

db.集合名稱.count({條件})

表示返回集合中的文檔數(shù)量

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

在count()函數(shù)中添加條件
例:統(tǒng)計(jì)年齡大于20的男生人數(shù)

db.集合名稱.count(
    {
        age:{$gt:20},
        gender:1
    }
)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末胚膊,一起剝皮案震驚了整個(gè)濱河市故俐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌紊婉,老刑警劉巖购披,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異肩榕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)惩妇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門株汉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人歌殃,你說我怎么就攤上這事乔妈。” “怎么了氓皱?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵路召,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我波材,道長(zhǎng)股淡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任廷区,我火速辦了婚禮唯灵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘隙轻。我一直安慰自己埠帕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布玖绿。 她就那樣靜靜地躺著敛瓷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪斑匪。 梳的紋絲不亂的頭發(fā)上呐籽,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音秤标,去河邊找鬼绝淡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛苍姜,可吹牛的內(nèi)容都是我干的牢酵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼衙猪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼馍乙!你這毒婦竟也來了布近?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤丝格,失蹤者是張志新(化名)和其女友劉穎撑瞧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體显蝌,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡预伺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了曼尊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酬诀。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖骆撇,靈堂內(nèi)的尸體忽然破棺而出瞒御,到底是詐尸還是另有隱情,我是刑警寧澤神郊,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布肴裙,位于F島的核電站,受9級(jí)特大地震影響涌乳,放射性物質(zhì)發(fā)生泄漏蜻懦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一夕晓、第九天 我趴在偏房一處隱蔽的房頂上張望阻肩。 院中可真熱鬧,春花似錦运授、人聲如沸烤惊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柒室。三九已至,卻和暖如春逗宜,著一層夾襖步出監(jiān)牢的瞬間雄右,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國打工纺讲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留擂仍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓熬甚,卻偏偏與公主長(zhǎng)得像逢渔,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乡括,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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