1. 程式人生 > >mongodb----查詢之聚合操作與索引

mongodb----查詢之聚合操作與索引

 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()