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會為文檔分配一個唯一的ObjectId類型的_id

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

保存

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

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

db.<collections>.save().png
  • save區(qū)別于insert: insert中文檔的_id已經(jīng)存在如果存在直接報(bào)錯
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():查詢,只返回第一個

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

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

//查找所有女生
db.stu.find({gender:false})
//查找一個女生
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中寫多個條件即可

    查詢年齡大于或等于18, 并且性別為true的學(xué)生
    
    • db.stu.find({age:{$gte:18},gender:true})
  • or:使用$or, 值為數(shù)組, 數(shù)組中每個元素為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" : 判斷在某個范圍內(nèi)
  • "$nin" 判斷不在某個范圍內(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)

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

  • 同時(shí)使用:

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

自定義查詢(了解)

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

投影

  • 在查詢到的返回結(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ì)個數(shù)

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

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

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

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

    • db.stu.find({gender:true}).count()
    • db.stu.count({gender:true})
  • 統(tǒng)計(jì)年齡大于20的男生的個數(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容