1.基本查詢 ①方法find():查詢 db.集合名稱.find({條件文檔}) ②方法findOne():查詢,只返回第一個 db.集合名稱.findOne({條件文檔}) ③方法pretty():將結果格式化 db.集合名稱.find({條件文檔}).pretty() 2.比較運算符 # 等於,默認是等於判斷,沒有運算符 # 小於,$lt less-than # 小於或等於,$lte less-than,equal # 大於,$gt greater-than # 小於或等於,$gte greater-than,equal # 不等於,$ne not equal db.collection2.find({name:'郭靖'}) db.collection2.find({age:{$gte:18}}) 3.邏輯運算符 ①邏輯與 # 默認是邏輯與的關係 # 例:查詢年齡大於或等於18,而且性別爲true的學生 db.collection2.find({age:{$gte:18}, gender:true}) ②邏輯或 # 使用$or,值爲數組,數組中每一個元素爲json # 例:查詢年齡大於18,或性別爲false的學生 db.collection2.find({$or:[{age:{$gt:18}},{gender:false}]}) 注意點:find() >> 或條件下的{} >> $or[ ] >> >> {條件a},{條件b} >> {域:{ 邏輯符判斷} } ③或、與共用 # 例:查詢年齡大於18或姓名是郭靖,而且性別爲男生 db.collection2.find( {$or:[ {age:{$gt:18} },{name:'郭靖'} ],gender:true} ) 4.範圍運算符 # $in|$nin # 例:查詢年齡爲18,28的學生 db.collection2.find( {age:{$in:[18, 28] } } ) # 這裏要注意了,最大與最小都須要表中含有這幾個數 5.支持正則表達式 # 使用 // 或 $regex 編寫正則表達式 # 例:db.collection2.find( {name:/^黃/} ) db.collection2.find( {name:{$regex:'^黃'} } ) 6.自定義查詢 # 使用$where後面寫一個函數,返回知足條件的數據 # 例:查詢大於30歲的學生 db.collection2.find( { $where: function(){ return this.age > 18 }}) 7.Limit和Skip ①方法limit():讀取指定數量的文檔 # db.集合名稱.find().limit(NUMBER) db.collection2.find().limit(2) # 附:若是指定參數則顯示集合中的全部文檔 ②方法skip():用於跳過指定數量的文檔 # db.集合名稱.find().skip(NUMBER) db.stu.find().skip(2) # 附:參數NUMBER表示跳過的記錄條數,默認爲0 ③limit()與skip()一塊兒使用 # 不分前後順序;跳過指定數量文檔,再讀取指定數量的文檔 # 查詢數據 db.collection1.find().limit(4).skip(5) db.collection1.find().skip(5).limit(4) 8.投影 --選擇字段顯示數據 # ①db.集合名稱.find({},{ 字段名稱:1, ...}) db.collection2.find({},{name:1, gender:1}) # '1':表示顯示字段,不設置表示不顯示 # ②特殊:對於_id列默認是顯示的, # 若是不顯示須要明確設置爲0 db.collection2.find({},{_id:0,name:1,gender:1}) 9.排序 --對結果集進行排序 參數1爲升序排列 參數-1位降序排列 # db.集合名稱.find().sort({字段:1....}) # --根據性別降序,再根據年齡升序 db.collection2.find().sort({gender:-1,age:1}) 10.統計個數 ①方法count():用於統計結果集中文檔條數 1.db.集合名稱.find({條件}).count() db.collection2.find({gender:true}).count() # --統計男生人數 2.db.集合名稱.count({條件}) db.collection2.count({age:{$gt:20}, gender:true}) # --統計年齡大於20的男生人數 11.消除重複 ①方法distinct():對字段數據進行去重,提取 --db.集合名稱.distinct('去重字段',{條件}) db.collection2.distinct('hometown',{age:{$gt:18}}) # 查詢年齡大於18歲的學生,來自哪些省份 # 4.聚合查詢 1.基本語法 --語法 db.集合名稱.aggregate( {管道: {表達式} } ) 附: 1.管道:在Unix和Linux中通常用於將當前命令的 輸出結果做爲下一個命令的輸入 2.表達式:處理輸入文檔並輸出 2.經常使用表達式 $sum: 計算綜合,$sum:1 表示以一倍計數 $avg: 計算平均值 $min: 獲取最小值 $max: 獲取最大值 $push: 在結果文檔中插入值到第一個文檔數據 $first: 根據資源文檔的排序獲取第一個文檔數據 $last: 根據資源文檔的排序獲取最後一個文檔數據 3.經常使用管道 ①$group --將集合中的文檔分組,可用於統計結果 --_id表示分組的依據,使用某個字段的格式爲'$字段' # 統計男生、女生的總人數 db.stu.aggregate( {$group: { _id:'$gender', counter:{$sum:1} } } ) --透視數據 # 統計學生性別及學生姓名 db.stu.aggregate( {$group: { _id:'$gender', name:{$push:'$name'} } } ) --使用$$ROOT能夠將文檔內容加入到結果集的數組中 db.stu.aggregate( {$group: { _id:'$gender', name:{$push:'$$ROOT'} } } ) ②$match --修改輸入文檔的結構,如重命名、增長、刪除字段、建立計算結果 --用於過濾數據,只輸出符合條件的文檔 --使用MongoDB的標準查詢操做 # 查詢年齡大於20的學生 db.stu.aggregate( {$match:{age:{$gt:20}}} ) # 查詢年齡大於20的男生、女生人數 db.stu.aggregate( {$match:{age:{$gt:20}}}, {$group:{_id:'$gender',counter:{$sum:1}}} ) ③$project --修改輸入文檔的結構, 如重命名、增長、刪除字段、建立計算結果 # 查詢學生的姓名、年齡 db.stu.aggregate( {$project:{_id:0,name:1,age:1}} ) # 查詢男生、女生人數,輸出人數 db.stu.aggregate( {$group:{_id:'$gender',counter:{$sum:1}}}, {$project:{_id:0,counter:1}} ) ④$sort --將輸入文檔排序後輸出 # 查詢學生信息,按年齡升序 b.stu.aggregate({$sort:{age:1}}) # 查詢男生、女生人數,按人數降序 db.stu.aggregate( {$group:{_id:'$gender',counter:{$sum:1}}}, {$sort:{counter:-1}} ) ⑤$limit和$skip --$limit # 限制聚合管道返回的文檔數 # 查詢2條學生信息 db.stu.aggregate({$limit:2}) --$skip # 跳過指定數量的文檔,並返回餘下的文檔 # 查詢從第3條開始的學生信息 db.stu.aggregate({$skip:2}) # 統計男生,女生人數,按人數升序,取第2條數據 db.stu.aggregate( {$group:{_id:'$gender', counter:{$sum:1}}} {$sort:{counter:1}} {$skip:1} {$limit:1} ) ⑥$unwind字段拆分查詢 --語法 --文檔中一個數組字段含有多個值 --根據字段下的值拆分多條 --每條包含數組中的一個值 --db.集合名稱.aggregate({$unwind:'$字段名稱'}) # $unwind聚合方法下含有兩個屬性: path:'$字段名稱' preserveNullAndEmptyArrays:<布爾值> # 不填寫屬性,默認表示<布爾值>爲false # 且不用標記屬性名 --構造數據 db.t3.insert([ { "_id" : 1, "item" : "a", "size": [ "S", "M", "L"] }, { "_id" : 2, "item" : "b", "size" : [ ] }, { "_id" : 3, "item" : "c", "size": "M" }, { "_id" : 4, "item" : "d" }, { "_id" : 5, "item" : "e", "size" : null } ]) --查看查詢結果,顯示對空數組,無字段,null的文檔 db.t3.aggregate( { $unwind:{ path:'$size', preserveNullAndEmptArrays:true}}) --查看查詢結果,不顯示空數組,無字段,null的文檔 db.t3.aggregate({$unwind: '$size'}) 至關於: db.t3.aggregate({$unwind:{path:'$size', preserveNullAndEmptyArrays:false}})