mongodb----查詢之聚合操作與索引
阿新 • • 發佈:2019-02-08
mongdb--聚合操作
mongodb可以基於資料處理的聚合管道,每個文件通過一個由多個階段(stage)組成的管道,可以對每個階段的管道進行分組、過濾等功能,然後經過一系列的處理,輸出相應的結果。
語法:db.集合名稱.aggregate({管道:{表示式}})
常用管道命令
在mongodb中,文件處理完畢後, 通過管道進行下⼀次處理 常用管道命令如下:
$group: 將集合中的文件分組, 可用於統計結果
$match: 過濾資料, 只輸出符合條件的⽂檔
$project: 修改輸入文件的結構, 如重新命名、 增加、 刪除欄位、 建立計算結果
$sort: 將輸入文件排序後輸出
$limit: 限制聚合管道返回的文件數
$skip: 跳過指定數量的文件, 並返回餘下的文件
常用表示式
表示式:處理輸⼊⽂檔並輸出 語法:表示式:'$列名' 常⽤表示式:
$sum: 計算總和, $sum:1 表示以⼀倍計數
$avg: 計算平均值
$min: 獲取最小值
$max: 獲取最⼤值
$push: 在結果⽂檔中插⼊值到⼀個數組中
使用注意點:
$group
- $group是所有聚合命令中用的最多的一個命令,用來將集合中的文件分組,可用於統計結果
db.stu.aggregate({$group:{_id:"$gender",counter:{$sum:1}}})
其中注意點:
- db.db_name.aggregate是語法,所有的管道命令都需要寫在其中
- _id 表示分組的依據,按照哪個欄位進行分組,需要使用$gender表示選擇這個欄位進行分組
- $sum:1 表示把每條資料作為1進行統計,統計的是該分組下面資料的條數
$match
$match用於進行資料的過濾,是在能夠在聚合操作中使用的命令,和find區別在於$match 操作可以把結果交給下一個管道處理,而find不行
mogodb----索引
使用索引可以:加快查詢速度,進行資料的去重兩大優勢
建立批量的資料 10W 測試的資料
for (var index = 0; index < 100000; index++) {db.st.insert( {_id:index,name:"name"+index,age:index})}
檢視 資料的時間,對比毫秒
- 檢視 資料的時間 對比 毫秒 db.xx.find().explain('executionStats')
- 檢視 _id 單位毫秒 db.st.find({_id:199999}).explain('executionStats')
- 檢視 name,單位毫秒 db.st.find({name:"name199999"}).explain('executionStats')
設定 ID索引ensureIndex
- 語法:db.xx.ensureIndex({欄位:1})
- 建立單個索引: db.stu.ensureIndex({age:1})
- 建立聯合索引: db.stu.ensureIndex({name:1,age:1})
查詢和刪除索引
- 刪除 自定義的索引
db.stu.dropIndex("age_1")- 查詢 所有的索引
db.st.getIndexes()