MongoDB中數(shù)據(jù)的增刪改查

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

說到MongoDB的增刪改查我碟,首先要知道MongoDB中的三要素

  • 數(shù)據(jù)庫瞻凤,相似于mysql中的數(shù)據(jù)庫
  • 集合肥隆,相似于mysql中的表
  • 文檔站绪,相似于mysql中表的記錄

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

  • db.集合名稱.insert(document)

    db.stu.insert({name:'小龍女',gender:1})
    
    db.stu.insert({_id:"20170101",name:'劉德華',gender:1})
    
  • 插入文檔時(shí)遂鹊, 如果不指定_id參數(shù)振乏, MongoDB會為文檔分配一個(gè)唯一的ObjectId類型的_id

  • 插入單條指定為字典, 插入多條時(shí)需要指定為列表

保存

  • db.集合名稱.save(document)

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

db.<collections>.save().png
  • save區(qū)別于insert: insert中文檔的_id已經(jīng)存在如果存在直接報(bào)錯(cuò)
db.<collections>.insert().png

二秉扑、查詢:

  • 簡單查詢:db.集合名稱.find()

高級查詢

查詢數(shù)據(jù)準(zhǔn)備

db.stu.drop() db.stu.insert({_id : 1, name:'郭靖',hometown:'蒙古',age:20,gender:true}) db.stu.insert({_id : 2, name:'黃蓉',hometown:'桃花島',age:18,gender:false}) db.stu.insert({_id : 3, name:'華箏',hometown:'蒙古',age:18,gender:false}) db.stu.insert({_id : 4, name:'黃藥師',hometown:'桃花島',age:40,gender:true}) db.stu.insert({_id : 5, name:'段譽(yù)',hometown:'大理',age:16,gender:true}) db.stu.insert({_id : 6, name:'段王爺',hometown:'大理',age:45,gender:true})

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

  • 方法find(): 查詢

    • db.集合名稱.find({條件文檔})
  • 方法findOne():查詢慧邮,只返回第一個(gè)

    • db.集合名稱.findOne({條件文檔})
  • 方法pretty(): 將結(jié)果格式化

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

//查找所有女生
db.stu.find({gender:false})
//查找一個(gè)女生
db.stu.findOne({gender:false})
// 查找所有的女生并格式化顯示
db.stu.find({gender:false}).pretty()

比較運(yùn)算符

  • 等于: 默認(rèn)是等于判斷, 沒有運(yùn)算符
  • 小于:$lt (less than)
  • 小于等于:$lte (less than equal)
  • 大于:$gt (greater than)
  • 大于等于:$gte
  • 不等于:$ne
  • 舉例:

// 查找年齡等于18歲的學(xué)生
db.stu.find({age:18})
// 查找年齡小于18歲的學(xué)生
db.stu.find({age:{$lt: 18}})
// 查找年齡小于等于18歲的學(xué)生
db.stu.find({age:{$lte: 18}})
// 查找年齡大于18歲的學(xué)生
db.stu.find({age:{$gt: 18}})
// 查找年齡大于等于18歲的學(xué)生
db.stu.find({age:{$gte: 18}})
// 查找年齡不等于18歲的學(xué)生
db.stu.find({age:{$ne: 18}})

邏輯運(yùn)算符

  • and:在json中寫多個(gè)條件即可

    查詢年齡大于或等于18舟陆, 并且性別為true的學(xué)生
    
    • db.stu.find({age:{$gte:18},gender:true})
  • or:使用$or误澳, 值為數(shù)組, 數(shù)組中每個(gè)元素為json

    查詢年齡大于18秦躯, 或性別為false的學(xué)生
    
    • db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})
  • 混合查詢

    查詢年齡大于18或性別為男性忆谓, 并且家鄉(xiāng)為大理
    
    • db.stu.find({$or:[{age:{$gte:18}},{gender:true}],hometown:'大理'})

范圍運(yùn)算符

  • "$in" : 判斷在某個(gè)范圍內(nèi)
  • "$nin" 判斷不在某個(gè)范圍內(nèi)
    • 查詢年齡為18或20的學(xué)生

      • db.stu.find({age:{$in:[18,20]}})
    • 查詢年齡為不為18或20的學(xué)生

      • db.stu.find({age:{$nin:[18,20]}})

支持正則表達(dá)式(了解)

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

  • 查詢姓黃的學(xué)生

    • db.stu.find({name:/^黃/})

      • 上面這種寫法在pymongo中不支持
    • db.stu.find({name:{$regex: '^黃' }})

      • 該寫法pymongo中支持

limit和skip

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

  • 語法: db.集合名稱.find().limit(NUMBER)

    • 查詢2條學(xué)生信息
    • db.stu.find().limit(2)
  • 方法skip(): 用于跳過指定數(shù)量的文檔

  • 語法: db.集合名稱.find().skip(NUMBER)

    • 跳過三個(gè)學(xué)生,查詢后面的
    • db.stu.find().skip(3)
  • 查詢學(xué)生信息跳過3個(gè)學(xué)生, 再查詢2個(gè)學(xué)生

  • 同時(shí)使用:

    • db.stu.find().limit(2).skip(3)
    • db.stu.find().skip(3).limit(2)(推薦)

自定義查詢(了解)

  • 使用$where后面寫一個(gè)函數(shù), 返回滿足條件的數(shù)據(jù)
  • 舉例
  • 查詢年齡大于30的學(xué)生
db.stu.find({ 
    $where:function() { 
        return  this.age>30;} 
})
  • 注意: 必須使用 return 返回一個(gè)值

投影

  • 在查詢到的返回結(jié)果中踱承, 只選擇必要的字段

  • 語法: db.集合名稱.find({},{字段名稱:1,...})

    • 參數(shù)為字段與值倡缠, 值為1表示顯示, 值為0不顯示, 普通字段不寫就是不顯示
  • 特殊: 對于_id列默認(rèn)是顯示的茎活, 如果不顯示需要明確設(shè)置為0, 其他字段不顯示不寫即可

  • 舉例:

  • 查詢所有學(xué)生信息,只顯示姓名和年齡

    • db.stu.find({},{name:1,age:1})

      • 查詢的結(jié)果,除了name,age外還有_id類型
    • 如何去掉_id字段呢? , 在投影中給_id指定為0

      • db.stu.find({},{_id:0, name:1, age:1})

排序

  • 方法sort()昙沦, 用于對 集進(jìn)行排序

  • 語法: db.集合名稱.find({文檔條件}).sort({字段:1,...})

    • 參數(shù)1為升序排列
    • 參數(shù)-1為降序排列
  • 舉例:

  • 查詢所有學(xué)生,按年齡升序

    • db.stu.find().sort({age:1})
  • 查詢所有學(xué)生,按年齡降序

    • db.stu.find().sort({age:-1})
  • 根據(jù)性別降序, 再根據(jù)年齡升序

    • db.stu.find().sort({gender:-1,age:1})

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

  • 方法count()用于統(tǒng)計(jì)結(jié)果集中文檔條數(shù)

  • 語法: db.集合名稱.find({條件}).count()

    • db.集合名稱.count({條件})
  • 舉例:

  • 查詢男生的個(gè)數(shù)

    • db.stu.find({gender:true}).count()
    • db.stu.count({gender:true})
  • 統(tǒng)計(jì)年齡大于20的男生的個(gè)數(shù)

    • db.stu.count({age:{$gt:20},gender:true})

消除重復(fù)

  • 方法distinct()對數(shù)據(jù)進(jìn)行去重

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

  • 舉例:

  • 查詢學(xué)生的家鄉(xiāng),不能重復(fù)

    • db.stu.distinct('hometown')
  • 查詢年齡大于20的學(xué)生的家鄉(xiāng), 不能重復(fù)

    • db.stu.distinct('hometown',{age:{$gt:20}})

三载荔、更新修改

  • 語法: db.集合名稱.update( , , {multi: })

    • 參數(shù)query:查詢條件

    • 參數(shù)update:更新操作符

    • 參數(shù)multi:可選盾饮, 默認(rèn)是false,表示只更新找到的第一條記錄懒熙, 值為true表示把滿足條件的文檔全部更新

  • 舉例:

    • db.stu.update({name:'hr'},{name:'mnc'}) 更新一條,沒有更新的字段會丟棄.


      db.stu.update().png
    • db.stu.update({name:'hr'},{$set:{name:'hys'}}) 更新一條,沒有更新的字段不會丟棄.

    • db.stu.update({},{$set:{gender:0}},{multi:true}) 更新全部

  • 注意:"multi update only works with $ operators" 更新全部,必須使用$set

四丘损、刪除

  • 語法: db.集合名稱.remove(,{justOne: })

    • 參數(shù)query:可選,刪除文檔的條件

    • 參數(shù)justOne:可選煌珊, 如果設(shè)為true或1号俐, 則只刪除一條, 默認(rèn)false定庵, 表示刪除多條

db.<collections>.remove().png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吏饿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蔬浙,更是在濱河造成了極大的恐慌猪落,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畴博,死亡現(xiàn)場離奇詭異笨忌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)俱病,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門官疲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袱结,“玉大人,你說我怎么就攤上這事途凫」讣校” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵维费,是天一觀的道長果元。 經(jīng)常有香客問我,道長犀盟,這世上最難降的妖魔是什么而晒? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮阅畴,結(jié)果婚禮上倡怎,老公的妹妹穿的比我還像新娘。我一直安慰自己贱枣,他們只是感情好诈胜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著冯事,像睡著了一般。 火紅的嫁衣襯著肌膚如雪血公。 梳的紋絲不亂的頭發(fā)上昵仅,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機(jī)與錄音累魔,去河邊找鬼摔笤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛垦写,可吹牛的內(nèi)容都是我干的吕世。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼梯投,長吁一口氣:“原來是場噩夢啊……” “哼命辖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起分蓖,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤尔艇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后么鹤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體终娃,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年蒸甜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棠耕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片余佛。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖窍荧,靈堂內(nèi)的尸體忽然破棺而出辉巡,到底是詐尸還是另有隱情,我是刑警寧澤搅荞,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布红氯,位于F島的核電站,受9級特大地震影響咕痛,放射性物質(zhì)發(fā)生泄漏痢甘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一茉贡、第九天 我趴在偏房一處隱蔽的房頂上張望塞栅。 院中可真熱鬧,春花似錦腔丧、人聲如沸放椰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砾医。三九已至,卻和暖如春衣厘,著一層夾襖步出監(jiān)牢的瞬間如蚜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工影暴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留错邦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓型宙,卻偏偏與公主長得像撬呢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子妆兑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355

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