MongoDB中的數據查詢

準備數據

db.stu.insert({name:'郭靖',hometown:'蒙古',age:20,gender:true})
db.stu.insert({name:'黃蓉',hometown:'桃花島',age:18,gender:false})
db.stu.insert({name:'楊康',hometown:'大金',age:20,gender:true})
db.stu.insert({name:'穆念慈',hometown:'大宋',age:18,gender:false})
db.stu.insert({name:'東邪',hometown:'桃花島',age:40,gender:true})
db.stu.insert({name:'西毒',hometown:'西域',age:41,gender:true})
db.stu.insert({name:'南帝',hometown:'大理',age:42,gender:true})
db.stu.insert({name:'北丐',hometown:'大宋',age:45,gender:true})
db.stu.insert({name:'小甲',hometown:'大宋',age:45,gender:false})
db.stu.insert({name:'中神通',hometown:'全真教',age:44,gender:true})

基本查詢

  • 方法 find()

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

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

    這裏寫圖片描述

  • 方法pretty() 將結果格式化

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

    這裏寫圖片描述

比較運算符

  • 等於,默認就是等於判斷,沒有運算符

    db.stu.find({age:18}) //查詢所有年齡是18的同學
  • 小於:$lt

    db.stu.find({age:{$lt:18}})  //查詢年齡小於18的同學
  • 小於等於:$lte

    db.stu.find({age:{$lte:18}}) //查詢年齡小於等於18的同學
  • 大於: $gt

    db.stu.find({age:{$gt:18}})  //查詢年齡大於18的同學
  • 大於等於: $gte

    db.stu.find({age:{$gte:18}})  //查詢大於等於18的同學
  • 不等於: $ne

    db.stu.find({age:{$ne:18}})   //查詢年齡不等於18的同學

邏輯運算符

  • 查詢時有多個條件,多個條件之間需要通過邏輯運算符來連接

  • 邏輯與:默認的是邏輯與的關係

    // 查詢年齡大於或等於18,並且性別爲true的學生
    db.stu.find({age:{$gte:18},gender:true})

    這裏寫圖片描述

  • 邏輯或:使用$or,值爲數組,數組中每個元素爲json

    // 查詢年齡大於18,或性別爲false的學生
    db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})

    這裏寫圖片描述

  • and和or一起使用

    // 查詢年齡大於18或性別爲true的學生,並且學生的姓名爲郭靖
    db.stu.find({$or:[{age:{$ge:18}},{gender:true}],name:'郭靖'})

    這裏寫圖片描述

範圍運算符

  • 使用$in,$nin判斷是否在某個範圍內

    // 查詢年齡爲18,28的學生
    db.stu.find({age:{$in:[18,28]}})

    這裏寫圖片描述

正則表達式查詢

  • mongodb提供的終端shell,同時也是一個js的執行器,可以編寫js的代碼和函數

  • 使用//或$regex編寫正則表達式

    // 查詢姓黃的同學
    db.stu.find({name:/^黃/})
    db.stu.find({name:{$regex:'^黃'}})

    這裏寫圖片描述

自定義查詢

  • 使用$where後面寫一個函數,返回滿足條件的數據

    db.stu.find(
    {
        $where: function(){
          return this.age>30
        }
    }
    )

    這裏寫圖片描述

Limit和skip

  • limit():用於讀取指定數量的文檔

    db.集合名稱.find().limit(number)
    • 參數number:表示要讀取文檔的條數
    • 沒有指定Number則顯示集合中所有文檔
    // 顯示前兩條學生的信息
    db.stu.find().limit(3)

    這裏寫圖片描述

  • skip:用於跳過指定數量的文檔

    db.集合名稱.find().skip(number)
    • 參數number表示跳過的記錄條數,默認值爲0
  • limit和skip可以一起使用,不分先後順序。

投影

  • 在查詢到的返回結果中,只選擇必要的字段,而不是選擇一個文檔的整個字段

  • 語法:

    // 參數爲字段與值,值爲1表示顯示,值爲0不顯示
    db.集合名稱.find({},{字段名稱:1,...})
  • 對於需要顯示的字段,設置爲1即可,不設置即爲不顯示

  • 特殊:對於_id列默認是顯示的,如果不顯示需要明確設置爲0

排序

  • 方法sort(),用於對結果集進行排序

    db.集合名稱.find().sort({字段:1,...})
  • 參數1爲升序排列

  • 參數-1爲降序排列

    // 排序 age  從小到大
    db.stu.find({},{name:1,age:1}).sort({age:1})

    這裏寫圖片描述

統計個數

  • 方法count()用於統計結果集中文檔條數

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

    // 統計age大於18 的總人數
    db.stu.find({age:{$gt:18}}).count()
    db.stu.count({age:{$gt:18}})

    這裏寫圖片描述

消除重複

  • 方法distinct()對數據進行去重

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

    // 查找年齡大於18的學生,來自哪些省份
    db.stu.distinct('hometown',{age:{$gt:18}})

    這裏寫圖片描述

發佈了58 篇原創文章 · 獲贊 17 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章