1. 程式人生 > >MongoDB高階操作(2)

MongoDB高階操作(2)

查詢方法-常用查詢方法

查詢多條資料 -- 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 --
判斷在某個範圍 $nin --判斷不在某個範圍  
#查詢年齡為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}})