MongoDB高階操作(2)
阿新 • • 發佈:2018-12-04
查詢方法-常用查詢方法
查詢多條資料 -- db.集合名稱.find({條件文件}) 查詢一條資料 -- db.集合名稱.findOne({條件文件}) 結果格式化 --pretty()方法 -- db.集合名稱.find({條件文件}).pretty()比較運算子
and :在json中寫多個條件 or :$or 值為一個數組,陣列中每個json元素為或的條件 and與or混合查詢# 查詢年齡大於或等於18, 並且性別為true的學生db.stu.find({age:{$gte:18},gender:true}) # 查詢年齡大於18, 或性別為false的學生 db.stu.find({$or:[{age:{$gt:18}},{gender:false}]}) # 查詢年齡大於18或性別為女生, 並且家鄉為大理 db.stu.find({$or:[{age:{$gt:18}}, {gender:false}], hometown:'大理'})
範圍運算子
$in --#查詢年齡為18或20的學生 db.stu.find({age:{$in:[18,20]}}) #查詢年齡為不為18或20的學生 db.stu.find({age:{$nin:[18, 20]}})
正則表示式
{欄位:/正則/} ---在pymogodb中不支援 {欄位:{$regex:''正則"}}# 查詢姓黃的學生 db.stu.find({name:/^黃/}) db.stu.find({name:{$regex:'^黃'}})
limit和skip
使用場景:分頁 limit():用於讀取指定數量的文件 db.集合名稱.find().limit(NUMBER) skip():用於跳過指定數量的文件 db.集合名稱.find().skip(NUMBER)# 查詢2條學生資訊 db.stu.find().limit(2) # 跳過兩個學生,查詢後面的 db.stu.find().skip(2) # 混合使用 # 查詢學生資訊跳過3個學生, 再查詢2個學生 db.stu.find().limit(2).skip(3) db.stu.find().skip(3).limit(2)
自定義查詢
在pymongo中使用自定義查詢速度很慢, 比直接遍歷都要慢很多 使⽤$where後⾯寫⼀個函式, 返回滿⾜條件的資料# 查詢年齡大於30的學生 db.stu.find({$where:function(){ return this.age > 30;}})
投影
在查詢到的返回結果中只選擇必要的欄位 db.集合名稱.find({},{欄位名稱:1,...}) 引數為欄位與值, 值為1表示顯示, 值為0不顯示, 普通欄位不寫就是不顯示 對於_id列預設是顯示的, 如果不顯示需要明確設定為0, 其他欄位不顯示不寫即可 排序 sort() -用於對集合進行排序 db.集合名稱.find().sort({欄位:1,..}) 引數1為升序排列 引數為-1位降序排列# 查詢所有學生,按年齡升序 db.stu.find().sort({age:1}) # 查詢所有學生,按年齡降序 db.stu.find().sort({age:-1}) # 查詢所有學生先根據性別降序, 再根據年齡升序 db.stu.find().sort({gender:-1, age:1})
統計個數 count() 用於統計結果集中文件條數 db.集合名稱.find({條件}).count()
# 查詢男生的個數 db.stu.find({gender:true}).count() db.stu.count({gender:true}) 統計年齡大於20的男生的個數 db.stu.count({age:{$gt:20}, gender:true})
去重
distinct() 對資料進行去重 db.集合名稱.distinct('去重欄位',{條件})# 查詢學生的家鄉,不能重複 db.stu.distinct('hometown') # 查詢年齡大於20的學生的家鄉, 不能重複 db.stu.distinct('hometown', {age:{$gt:20}})