準備數據
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}})